gpt4 book ai didi

python - 在c中读取python的全局变量

转载 作者:太空宇宙 更新时间:2023-11-03 23:49:18 26 4
gpt4 key购买 nike

我正在尝试学习如何正确使用 Python/C API——我实际上需要做的就是读取一个全局变量(在我的例子中是字典——但我从一个简单的整数变量开始)。使用讨论: How to access a Python global variable from C?以及答案的来源: http://bytes.com/topic/python/answers/705918-c-api-embedded-python-how-get-set-named-variables我写了这个小东西:

Python 代码(tryStuff.py):

var1 = 1

var2 = ['bla', 'blalba']

var3 = {"3" : "Three", "2" : "Two", "1" : "One", "0" : "Ignition!"}

print "end of file - tryStuff!!"

C 代码(embedPythonTry.c):

#include <python2.7/Python.h>

int main(int argc, char **argv){
Py_Initialize();
PyRun_SimpleString("import sys");
PyRun_SimpleString("sys.path.append('<the absolute path of the folder in which the python file is located>')");
PyImport_ImportModule("tryStuff");
printf("After the import, before the addition\n");
PyObject *mainModule = PyImport_AddModule("__main__");
PyObject *var1Py = PyObject_GetAttrString(mainModule, "var1");
int var1Int = PyInt_AsLong(var1Py);
printf("var1=%d ; var1==NULL: %d\n", var1Int, var1Py==NULL);
Py_XDECREF(var1Py);
Py_Finalize();
return 0;
}

运行这个c程序的输出是:

end of file - tryStuff!!
After the import, before the addition
var1=-1 ; var1==NULL: 1

这意味着 Python 解释器找到并运行了正确的 Python 脚本,但不知何故它无法读取变量 (var1)。

谁能发现问题 - 我已经有点迷路了。看起来最简单的情况就是可以应用 Python/C API,但它不起作用。我错过了什么?

最佳答案

您应该对 PyImport_ImportModule 的结果调用 PyObject_GetAttrString。我不知道您为什么认为 __main__ 模块应该定义该变量:

PyObject *mod = PyImport_ImportModule("tryStuff");
PyObject *var1Py = PyObject_GetAttrString(mod, "var1");

您还应该添加对结果的检查,因为 PyImport_ImportModule 可以在导入失败时返回 NULL

关于python - 在c中读取python的全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24732753/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com