问题描述
我正在尝试编写一些 Python-C++ 代码。我在C++代码中定义了一个名为hw
的模块,使用PyModule_Create
和PyObject_CallNoArgs
可以成功加载和调用。但是在下面的代码中,PyRun_SimpleString("hw.hw")
抱怨 NameError: name 'hw' is not defined
。为什么会发生这种情况? PyModule_Create
不会将模块 hw
导入解释器吗?如果没有,我如何编写 C++ 代码以使模块 hw
可用于解释器 (PyRun_SimpleString
)? (出于技术原因,我们不能将 hw
放在单独的 .c 文件中来为 import hw
之类的东西生成 .so)。
非常感谢您的帮助!
#include <Python.h>
#include <cstdio>
static PyObject *hw(PyObject *self){
printf("Hello World!\n");
Py_RETURN_NONE;
}
static PyMethodDef hwMethods[] = {
{"hw",(PyCFunction) hw,METH_VaraRGS },{NULL,NULL}
};
static struct PyModuleDef hwDef = {
PyModuleDef_HEAD_INIT,"hw",NULL,-1,// global state,no sub-interpreters
hwMethods,NULL
};
int main(int argc,char *argv[])
{
Py_Initialize();
PyImport_AddModule("__main__");
PyObject *pModule = PyModule_Create(&hwDef);
PyObject* pFunc = PyObject_GetAttrString(pModule,"hw");
PyObject_CallNoArgs(pFunc); // Succeed.
PyRun_SimpleString("hw.hw()");// Fail!
Py_Finalize();
return 0;
}
输出:
Hello World!
Traceback (most recent call last):
File "<string>",line 1,in <module>
NameError: name 'hw' is not defined
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)