Python C扩展:PyEval_GetLocals()返回NULL

Python C Extension: PyEval_GetLocals() returns NULL

本文关键字:返回 NULL GetLocals 扩展 PyEval Python      更新时间:2023-10-16

我需要在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();

在手册中,它说如果没有帧正在运行它返回NULL,但是…有一个帧在运行!

我做错了什么?

访问作用域中变量的正确方法是:

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