我将 Python 嵌入到具有定义的 API 的 C/C++ 应用程序中。
应用程序需要实例化脚本中定义的类,其结构大致如下:
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);
这些行运行正常,但对使我的代码工作没有影响。显然,我的真实代码有大量错误检查,我已经排除了这些错误检查,所以不用担心!
所以我的问题是:如何将嵌入式解释器适当地定向到我的脚本,以便我可以实例化这些类?