Python:从C函数中确定模块名称

时间:2014-10-20 02:37:27

标签: python embedding extending

我的应用程序嵌入了python。该应用程序通过添加它自己的函数来扩展嵌入式python:

PyObject *ReadDPoint(PyObject *self, PyObject *args)

然后应用程序运行不同的python脚本(模块),调用ReadDPoint扩展函数。 任务是确定调用的ReadDPoint函数内的模块名称,即调用函数的模块的名称。 我希望解决方案就像其中之一:

PyObject *module_name =  PyObject_GetAttrString(self, "__name__") 

char *module_name = PyModule_GetName(self) 

但我非常惊讶地发现扩展函数ReadDpoint self内部等于NULL,并且引用它会导致崩溃。 有没有办法确定C函数内的模块名称? 谢谢!

1 个答案:

答案 0 :(得分:0)

我找到了一种方法来确定调用扩展C函数的模块的名称:

PyFrameObject *pyframe;
PyObject *pydict;
pyframe = PyEval_GetFrame();
pydict = pyframe->f_globals;
PyObject *pyname;
pyname = PyDict_GetItemString(pydict, "__name__");
wxMessageBox(PyString_AsString(pyname));

现在pyname拥有搜索到的模块名称