【发布时间】:2018-03-13 12:37:01
【问题描述】:
我遵循了一些教程和建议,我什至使用PyRun_SimpleString 运行了一个没有问题的函数。
我有一个名为 tomograph.py 的文件,其中包含我想要执行的 makeFiles(path,alpha,n,l) 函数,以及我设法运行的 my_fun(x) 函数(正如我已经提到的)。
这就是我在 Qt C++ 项目中所做的事情
Py_Initialize();
PyObject* moduleString = PyString_FromString((char*)"tomograph");
PyObject* module = PyImport_Import(moduleString);
PyObject* function = PyObject_GetAttrString(module,(char*)"makeFiles");
PyObject* args = PyTuple_Pack(4,filename,alpha,n,l);
//PyRun_SimpleString("my_fun(5)");
PyObject* myResult = PyObject_CallObject(function,args);
Py_Finalize();
当我运行此代码时,我在
处遇到分段错误PyObject* function = PyObject_GetAttrString(module,(char*)"makeFiles");
我做错了什么?
【问题讨论】:
-
你在
PyObject_GetAttrString(module,(char*)"makeFiles")中使用之前没有检查module是否有效。如果之前的呼叫失败,则可能是nullptr。在调试器中观察这一点以确定。一般来说,您应该在您的 C++ 代码中添加与此相关的检查。 -
好的,所以我添加了一些检查,结果发现导入模块确实存在问题。我应该将 .py 文件放在哪里以确保我的应用可以找到它?