Python'u tanımlanmış bir API'ye sahip bir C/C++ uygulamasına yerleştiriyorum. Bu kullanarak halletmek için I (kanıtı konsepti için) geçmişte başardınızGömülü Python 2.7.2 Kullanıcı tanımlı bir dizinden bir modülün içe aktarılması
class userscript1:
def __init__(self):
##do something here...
def method1(self):
## method that can be called by the C/C++ app...etc
:
uygulama böyle kabaca yapılandırılmıştır bir komut dosyası tanımlanan sınıfları, örneğini gerekiyor aşağıdaki kod türü: Şimdi bir üretim ortamında daha fazlasında olduğumu
PyObject* pName = PyString_FromString("userscript.py");
PyObject* pModule = PyImport_Import(pName);
PyObject* pDict = PyModule_GetDict(pModule);
PyObject* pClass = PyDict_GetItemString(pDict, "userscript");
PyObject* scriptHandle = PyObject_CallObject(pClass, NULL);
, bu PyImport_Import hattında başarısız - Ben komut dosyasına bir dizin prepend çalışıyorum çünkü bu olabileceğini düşünüyorum isim, örneğin
PyObject* pName = PyString_FromString("E:\\scriptlocation\\userscript.py");
Şimdi, size ne denedim hakkında bir fikir vermek için, ben bu modül için arama yapmak için bu çağrıların hepsi önce sistem yolunu değiştirerek çalıştı. Temelde modifiye sys.path programlı çalıştı:
PyObject* sysPath = PySys_GetObject("path");
PyObject* path = PyString_FromString(scriptDirectoryName);
int result = PyList_Insert(sysPath, 0, path);
Bu satırlar Tamam çalıştırmak ama benim kod çalışmasını sağlamak üzerinde hiçbir etkisi yoktur. Açıkçası, benim gerçek kodum, dışarıda bıraktığımı kontrol etmek için bir tekne hatası hatası veriyor, bu yüzden endişelenme!
Sorularım: Katıştırılmış yorumlayıcıyı komut dosyalarına uygun şekilde yönlendiririm böylece sınıfları başlatabilirim?
- çok teşekkürler Bu beni duvardan geçirdi! Şimdi test senaryosunda neyin yanlış olduğunu bulmak için arıyorum! – Fritz
Python 3'te PyString_FromString gitti. Bunun yerine PyBytes_FromString kullanın. – edj