常用的Python/C API介绍
扫描二维码
随时随地手机看文章
返回PY类型字符串 PyString_FromString 加载模块 PyImport_Import ************************* C++向Python传参数是以元组(tuple)的方式传过去的 pArgs = PyTuple_New(1); PyTuple_SetItem(pArgs, 0, PyInt_FromLong(a)); 或者 pArgs=Py_BuildValue("(i)", a); ************************************************ 调用PY函数 PyObject_CallObject 获取PY属性或函数 PyObject_GetAttrString 常用的Python/C API介绍 下面是例子中用到的几个Python/C API的简要介绍及示例代码。注意,这并不是这些函数的详细介绍,而仅仅是我们所用到的功能简介,更详细内容请参考文档[1]、[2]、[3]、[4]。 打开Microsoft Visual Studio .NET 2003,新建一个控制台程序,#include,并在main函数里加入示例代码。 //先定义一些变量 char *cstr; PyObject *pstr, *pmod, *pdict; PyObject *pfunc, *pargs; 1. void Py_Initialize( ) 初始化Python解释器,在C++程序中使用其它Python/C API之前,必须调用此函数,如果调用失败,将产生一个致命的错误。例: Py_Initialize(); 2. int PyRun_SimpleString( const char *command) 执行一段Python代码,就好象是在__main__ 函数里面执行一样。例: PyRun_SimpleString("from time import time,ctimen" "print ''Today is'',ctime(time())n"); 3. PyObject* PyImport_ImportModule( char *name) 导入一个Python模块,参数name可以是*.py文件的文件名。相当于Python内建函数__import__()。例: pmod = PyImport_ImportModule("mymod"); //mymod.py 4. PyObject* PyModule_GetDict( PyObject *module) 相当于Python模块对象的__dict__ 属性,得到模块名称空间下的字典对象。例: pdict = PyModule_GetDict(pmod); 5. PyObject* PyRun_String( const char *str, int start, PyObject *globals, PyObject *locals) 执行一段Python代码。 pstr = PyRun_String("message", Py_eval_input, pdict, pdict); 6. int PyArg_Parse( PyObject *args, char *format, ...) 解构Python数据为C的类型,这样C程序中才可以使用Python里的数据。例: /* convert to C and print it*/ PyArg_Parse(pstr, "s", &cstr); printf("%sn", cstr); 7. PyObject* PyObject_GetAttrString( PyObject *o, char *attr_name) 返回模块对象o中的attr_name 属性或函数,相当于Python中表达式语句:o.attr_name。例: /* to call mymod.transform(mymod.message) */ pfunc = PyObject_GetAttrString(pmod, "transform"); 8. PyObject* Py_BuildValue( char *format, ...) 构建一个参数列表,把C类型转换为Python对象,使Python可以使用C类型数据,例: cstr="this is hjs''s test, to uppercase"; pargs = Py_BuildValue("(s)", cstr); 9. PyEval_CallObject(PyObject* pfunc, PyObject* pargs) 此函数有两个参数,都指向Python对象指针,pfunc是要调用的Python 函数,通常可用PyObject_GetAttrString()获得;pargs是函数的参数列表,通常可用Py_BuildValue()构建。例: pstr = PyEval_CallObject(pfunc, pargs); PyArg_Parse(pstr, "s", &cstr); printf("%sn", cstr); 10. void Py_Finalize( ) 关闭Python解释器,释放解释器所占用的资源。例: Py_Finalize();