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