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

3

有没有一种方法可以获取现有对象的对象引用,在嵌入式Python代码中?

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

编辑: 举个例子, 假设我在代码的某个部分导入了某些模块,使用以下方式:

PyRun_SimpleString("var = 1");

(或者也可以是定义了同一个变量的外部脚本)

现在,在代码的另一个地方,我想要获取那个变量。我正在寻找像这样的东西

PyObject *varPy = PyObject_GetGlobalObject("var");

"读取Python全局变量在C中的值"部分回答了我的问题,暗示了如果没有对创建它的模块的引用,就无法检索到全局定义的变量。这是正确的吗?"

1
你能添加更多的代码展示你想要做什么吗? - tynn
回应您的编辑:如果您知道变量所在模块的名称,您可以导入它以获取对该模块的引用(导入已经导入的模块没有问题)。 - DavidW
此外,如果您查找PyRun_SimpleString的文档,它会告诉您它所运行的模块是__main__ - DavidW
感谢DavidW的建议。 该变量不是由任何模块创建的,而是由主脚本创建的。 我以为它可以从__main__中检索出来,但在另一个问题(“读取全局变量...”)中,那个人说对他没有用(也许是因为它的变量是在脚本内定义的?)。 我会试一试! - FedFranz
非常好用!再次感谢。 我会写一篇完整的答案以供参考。 - FedFranz
1个回答

1
通过 在C中读取Python的全局变量 和我进行的一些测试,我整理了来自DavidW的信息(感谢您的帮助)。
要获取对已加载模块的引用,请使用:
PyImport_AddModule("module_name");

为了获取全局定义变量的引用,需要导入主模块并通过名称获取引用:
PyObject *mainModule = PyImport_AddModule("__main__");
PyObject *var = PyObject_GetAttrString(mainModule, "var_name");

如果变量在不同的模块/脚本中定义,则它只能在该模块中可见(而非全局可见)。因此,您需要将“main”更改为该特定模块的名称。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接