我在Python脚本中有一些全局变量。该脚本中的一些函数调用C - 是否可以在C中设置其中一个变量,如果是,如何设置?
我很欣赏这首先不是一个非常好的设计,但我需要对现有代码进行一些小改动,我不想对现有脚本进行重大修改。
答案 0 :(得分:14)
我不是蟒蛇大师,但我发现这个问题很有趣,所以我用Google搜索。 This是“python嵌入API”的第一个热门 - 它有帮助吗?
如果属性属于全局属性 一个模块的范围,然后你可以使用 获取句柄的“PyImport_AddModule” 到模块对象。例如,如果 你想获得一个的价值 名为 main 模块中的整数 “foobar”,你会做以下事情:
PyObject *m = PyImport_AddModule("__main__"); PyObject *v = PyObject_GetAttrString(m,"foobar"); int foobar = PyInt_AsLong(v); Py_DECREF(v);
答案 1 :(得分:6)
对于来自谷歌的任何人来说,这是直接的方法:
PyObject* PyEval_GetGlobals()
https://docs.python.org/2/c-api/reflection.html
https://docs.python.org/3/c-api/reflection.html
返回值作为字典进行访问。
答案 2 :(得分:0)
我建议使用pyrex
创建一个扩展模块,你可以将值存储在python中,然后cdef一系列函数,可以从C调用它们来返回值。
否则,很大程度上取决于您尝试传输的值的类型。
答案 3 :(得分:0)
您是否愿意稍微修改一下 ?
您可以让C函数返回全局的新值,然后像这样调用它:
my_global = my_c_func(...)
如果您直接使用Robin或Python C API,可以将全局字典作为附加参数传递并修改