通过PyRunString()计算的函数中的全局变量

2024-06-25 06:55:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我被一个看似简单的问题难住了,但答案却在我眼前

我已经将Python嵌入到C++应用程序中,并希望从C++执行Python函数。我需要给这个函数传递一个变量,它实际上是一个SWIG对象。所以我在globals dict中设置了一个变量:

swig_type_info* pTypeInfo = SWIG_TypeQuery("cdb::inst *");
PyObject * arg = SWIG_NewPointerObj( (void *) obj, pTypeInfo, 0);
PyDict_SetItemString(globals, "pyDBObject", arg);

然后调用python函数:

PyRun_String("my_cb()", Py_single_input, globals, locals);

python函数如下所示:

def my_cb() :
    print('calling my_cb()')
    inst = pyDBObject

我发现嵌入式python说没有定义“pyDBObject”。在my_cb中打印globals()确实表明它不在那里,但调用PyDict_GetItemString表示它在globals dict中

我错过了什么明显的东西吗


Tags: 对象函数答案应用程序myargdictswig