Python C扩展:PyEval_GetLocals()返回NULL

时间:2016-10-14 15:02:25

标签: python c++ c python-c-extension python-extensions

我需要在C / C ++中从Python读取局部变量。当我尝试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();

the manual中,它表示如果没有帧正在运行它会返回NULL,但是......框架正在运行!

我做错了什么?

我在Debian Jessie中运行它。

1 个答案:

答案 0 :(得分:0)

在范围内找到访问变量的正确方法是:

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();