Python C扩展:从引擎中提取参数
我想用Python对我的函数进行数学测试。 可以访问Python的典型程序是:
#include #include #include int RunTests() { Py_Initialize(); PyRun_SimpleString("a=5"); PyRun_SimpleString("b='Hello'"); PyRun_SimpleString("c=1+2j"); PyRun_SimpleString("d=[1,3,5,7,9]"); //question here Py_Finalize(); return 0; }
我的问题是:如何将参数a,b,c,d
提取到PyObject
?
PyRun_SimpleString()
在__main__
模块的上下文中执行代码。 您可以使用PyImport_AddModule()
检索对此模块的引用,从此模块获取全局字典并查找变量:
PyObject *main = PyImport_AddModule("__main__"); PyObject *globals = PyModule_GetDict(main); PyObject *a = PyDict_GetItemString(globals, "a");
您可能最好不要使用这种方法,最好创建一个新的globals
字典并使用PyRun_String()
在该globals
字典的上下文中执行代码:
PyObject *globals = PyDict_New(); PyObject *a = PyRun_String("5", Py_single_input, globals, globals);
这样,您不需要首先将表达式的结果存储在某个变量中,然后从__main__
的全局范围中提取它。 您仍然可以使用变量来存储中间结果,然后可以从上面的globals
提取。