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 содержит искомое имя