8
我將Python嵌入到將定義API的C/C++應用程序中。嵌入式Python 2.7.2從用戶定義的目錄導入模塊
應用程序需要實例化一個腳本定義的類,這是大致的結構是這樣的:
class userscript1:
def __init__(self):
##do something here...
def method1(self):
## method that can be called by the C/C++ app...etc
我已經在過去管理(用於驗證的概念)來完成這件事使用以下類型的代碼:
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);
現在,我更多的生產環境中,這種失敗在PyImport_Import行 - 我想這可能是因爲我想要添加目錄的腳本名稱,例如
PyObject* pName = PyString_FromString("E:\\scriptlocation\\userscript.py");
現在,給你什麼,我已經試過一個想法,我試着修改所有這些調用之前的系統路徑,使搜索此模塊。基本上嘗試以編程方式修改sys.path:
PyObject* sysPath = PySys_GetObject("path");
PyObject* path = PyString_FromString(scriptDirectoryName);
int result = PyList_Insert(sysPath, 0, path);
這些行運行正常,但沒有影響使我的代碼工作。顯然,我真正的代碼有一大堆的錯誤檢查,我排除了,所以不用擔心!
所以我的問題:我如何直接將嵌入式解釋器指向我的腳本,以便我可以實例化這些類?
非常感謝 - 這讓我穿過了牆!現在來弄清楚我所調用的測試腳本有什麼問題! – Fritz 2012-03-22 00:46:18
在Python 3中,PyString_FromString消失了。改用PyBytes_FromString。 – edj 2017-06-27 15:44:09