如何从C访问Python全局变量?
我在一个Python脚本里有一些全局变量。这个脚本里的某些函数会调用C语言的代码,请问我能在C语言中设置其中一个变量吗?如果可以的话,应该怎么做呢?
我知道这样设计其实不是很好,但我只想对现有的代码做个小改动,不想大动干戈去重写整个脚本。
4 个回答
0
你愿意稍微修改一下这个API吗?
你可以让C语言的函数返回一个新的全局变量值,然后像这样调用它:
my_global = my_c_func(...)
如果你在使用Robin或者直接使用Python的C API,你可以把全局变量的字典作为一个额外的参数传进去,并进行修改。
- 如果你的全局变量总是在同一个模块里,Sherm的解决方案看起来很不错。
6
如果你是从谷歌过来的,这里有个直接的方法:
PyObject* PyEval_GetGlobals()
https://docs.python.org/2/c-api/reflection.html
https://docs.python.org/3/c-api/reflection.html
返回的值可以像字典一样访问。
15
我不是Python高手,但我觉得这个问题很有趣,所以我在网上查了一下。这个链接是关于“python嵌入API”的第一个搜索结果——这对你有帮助吗?
如果某些属性属于模块的全局范围,那么你可以使用“PyImport_AddModule”来获取这个模块对象的句柄。举个例子,如果你想获取名为“foobar”的整数值,它在main模块里,你可以这样做:
PyObject *m = PyImport_AddModule("__main__"); PyObject *v = PyObject_GetAttrString(m,"foobar"); int foobar = PyInt_AsLong(v); Py_DECREF(v);