Python: определение имени модуля из функции C

Мое приложение встраивает 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 ответ

Я нашел способ определить имя модуля, из которого вызывается функция расширения C:

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

Теперь Pyname содержит искомое имя

Другие вопросы по тегам