是否可以从现有变量的名称获取PyObject引用?

时间:2016-10-24 15:57:14

标签: python python-2.7 python-c-api pyobject

有没有办法获取现有对象的对象引用, 在嵌入式Python代码中?

换句话说: 如果一个名为“对象”的对象已经存在(由脚本创建), 我需要"转换"它是一个PyObject *引用,是否有一个函数:PyObject * getObjectReference(char * name)?

编辑: 举个例子, 让我们说我通过使用

在代码的一部分中导入一些模块
PyRun_SimpleString("var = 1");

(或者它也可以是定义相同变量的外部脚本)

现在,在代码的另一点我想得到那个变量。我正在寻找像

这样的东西
PyObject *varPy = PyObject_GetGlobalObject("var");

" reading a global variable of python in c"部分回答我的问题隐含地说,如果没有对创建它的模块的引用,就不可能检索全局定义的变量。这是对的吗?

1 个答案:

答案 0 :(得分:0)

汇总从DavidW收集的信息(感谢您的帮助),reading a global variable of python in c以及我做的一些测试。

要获取对已加载模块的引用,请使用:

PyImport_AddModule("module_name");

为了获得对全局定义变量的引用,导入主模块并按名称获取引用:

PyObject *mainModule = PyImport_AddModule("__main__");
PyObject *var = PyObject_GetAttrString(mainModule, "var_name");

如果变量是在不同的模块/脚本中定义的,那么它只在该模块中可见(不是全局的)。 所以你必须改变" main "以及该特定模块的名称。