Python C 扩展:PyEval_GetLocals() returns NULL
Python C Extension: PyEval_GetLocals() returns NULL
我需要在 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 中,它说如果没有框架 运行,它 returns NULL,但是......有一个框架 运行!
我做错了什么?
我是 运行 Debian Jessie 中的这个。
原来访问范围内变量的正确方法是:
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();
我需要在 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 中,它说如果没有框架 运行,它 returns NULL,但是......有一个框架 运行!
我做错了什么?
我是 运行 Debian Jessie 中的这个。
原来访问范围内变量的正确方法是:
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();