【问题标题】:Python: determining module name from within C functionPython:从 C 函数中确定模块名称
【发布时间】: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 函数中的模块名称? 谢谢!

【问题讨论】:

标签: python embedding extending


【解决方案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 保存了寻找的模块名

【讨论】:

    猜你喜欢
    • 2020-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-28
    • 2015-11-19
    • 2021-02-07
    • 1970-01-01
    相关资源
    最近更新 更多