Расширение Python C: PyEval_GetLocals () возвращает NULL

Мне нужно читать локальные переменные из Python в C / C ++. Когда я пытаюсь PyEval_GetLocalsЯ получаю NULL. Это происходит, хотя Python инициализирован. Ниже приведен минимальный пример.

#include <iostream>
#include <Python.h>

Py_Initialize();
PyRun_SimpleString("a=5");
PyObject *locals = PyEval_GetLocals();
std::cout<<locals<<std::endl; //prints NULL (prints 0)
Py_Finalize();

В руководство, он говорит, что возвращает NULL, если ни один кадр не запущен, но … работает кадр!

Что я делаю неправильно?

Я запускаю это в Debian Jessie.

1

Решение

Оказывается, правильный способ доступа к переменным в области видимости:

Py_Initialize();
PyObject *main = PyImport_AddModule("__main__");
PyObject *globals = PyModule_GetDict(main);
PyObject *a = PyDict_GetItemString(globals, "a");
std::cout<<globals<<std::endl; //Not NULL
Py_Finalize();
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]