Python C 扩展:从引擎中提取参数
Python C extension: Extract parameter from the engine
我想使用 Python 对我的函数进行数学测试。一个可以访问 Python 的典型程序是这样的:
#include <iostream>
#include <string>
#include <Python.h>
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
s?
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
中提取这些结果。
我想使用 Python 对我的函数进行数学测试。一个可以访问 Python 的典型程序是这样的:
#include <iostream>
#include <string>
#include <Python.h>
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
s?
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
中提取这些结果。