Python:从 C 函数中确定模块名称
Posted
技术标签:
【中文标题】Python:从 C 函数中确定模块名称【英文标题】:Python: determining module name from within C function 【发布时间】:2014-12-14 23:20:18 【问题描述】:我的应用程序嵌入了 python。该应用程序通过添加它自己的函数来扩展嵌入式 python:
PyObject *ReadDPoint(PyObject *self, PyObject *args)
然后应用程序运行调用 ReadDPoint 扩展函数的不同 python 脚本(模块)。 任务是确定调用的 ReadDPoint 函数内的模块名称,调用该函数的模块的名称。 我希望解决方案类似于以下之一:
PyObject *module_name = PyObject_GetAttrString(self, "__name__")
或
char *module_name = PyModule_GetName(self)
但我惊讶地发现,在扩展函数 ReadDpoint 内部,self 等于 NULL,并且引用它会导致崩溃。 有没有办法确定 C 函数中的模块名称? 谢谢!
【问题讨论】:
这些代码都没有将函数添加到模块中。 看how the caller scope could be access in pure Python。 Python 中的函数属于它们定义的模块,而不是被调用的模块。如果您能够从 Python 代码中调用它,您的扩展模块必须已经注册了它。self
指向方法的对象,即unless it is a bound method; it is NULL
【参考方案1】:
我找到了一种方法来确定调用扩展 C 函数的模块名称:
PyFrameObject *pyframe;
PyObject *pydict;
pyframe = PyEval_GetFrame();
pydict = pyframe->f_globals;
PyObject *pyname;
pyname = PyDict_GetItemString(pydict, "__name__");
wxMessageBox(PyString_AsString(pyname));
现在 pyname 保存了寻找的模块名
【讨论】:
以上是关于Python:从 C 函数中确定模块名称的主要内容,如果未能解决你的问题,请参考以下文章