我在一个Python脚本中有一些全局变量。该脚本中的一些函数调用C语言 - 是否可以在C语言中设置其中的一个变量,如果可以,应该怎么做呢?
我知道这不是一个很好的设计,但我需要对现有代码进行小改动,我不想重新设计整个脚本。
我不是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);
如果您是从Google来到这里的,这里是直接的方法:
PyObject* PyEval_GetGlobals()
我建议使用pyrex
来创建一个扩展模块,你可以在Python中存储值,并且cdef一堆函数,这些函数可以从C中调用以返回那里的值。
否则,很大程度上取决于您要传输的值的类型。
你愿意稍微修改一下API吗?
你可以让C函数返回全局变量的新值,然后像这样调用它:
my_global = my_c_func(...)
如果你正在使用Robin或Python C API,你可以将全局变量字典作为附加参数传递并进行修改。
__main__
模块的全局变量。实际上,每个导入的Python模块都有自己的全局变量。 内置函数globals。 - user5538922