1. win下,首先,要在C++的工程文件总增加python安装目录下的include(附加包含目录,如C:\Python26\include)和libs目录(附加库目录,如C:\Python26\libs,和附加依赖项,如Python26.lib)。 注意工程文件可能需要使用Release模式,因为用Debug模式时,会需要Python26_d.lib,而你的安装目录下是不一定有这个文件的。 2. 在需要用到python的C++文件中,添加#include "Python.h" 3. 引用python的代码部分,都需要以Py_Initialize()开始,用Py_Finalize()结束 4. python相关的对象多半声明为PyObject指针,如PyObject *pstr, *pmod, *pdict, *pfunc, *pargs等 5. 最简单的调用一段python代码的方法: PyRun_SimpleString("from time import time, ctime\nprint 'today is ', ctime(time())\n");
6. 导入一个模块: pmod = PyImport_ImportModule("script") //script, 导入模块的名字
调用其中的一个函数pyPrint(name1, name2) pfunc = PyObject_GetAttrString(pmod, "pyPrint"); pargs = Py_BuildValue("s, s", "This is ", "a python code");
用指定的参数运行这个函数: PyEval_CallObject(pfunc, pargs); 7. 步骤6的另一种做法:导入一个模块: pname = PyString_FromString("script"); pmod = PyImport_Import(pname);
调用其中的函数pyPrint(name1, name2) pdict = PyModule_GetDict(pmod); pfunc = PyDict_GetItemString(pdict, "pyPrint");
pargs = Py_BuildValue("s, s", "Hello World", "again");
运行这个函数: PyEval_CallObject(pfunc, pargs);
注意,当py函数没有参数时,pargs = NULL
8. 释放PyObject 指针:Py_DECREF(pobj)
附:Py_BuildValue的使用例子,来自python documentation: Py_BuildValue("") None Py_BuildValue("i", 123) 123 Py_BuildValue("iii", 123, 456, 789) (123, 456, 789) Py_BuildValue("s", "hello") 'hello' Py_BuildValue("ss", "hello", "world") ('hello', 'world') Py_BuildValue("s#", "hello", 4) 'hell' Py_BuildValue("()") () Py_BuildValue("(i)", 123) (123,) Py_BuildValue("(ii)", 123, 456) (123, 456) Py_BuildValue("(i,i)", 123, 456) (123, 456) Py_BuildValue("[i,i]", 123, 456) [123, 456] Py_BuildValue("{s:i,s:i}", "abc", 123, "def", 456) {'abc': 123, 'def': 456} Py_BuildValue("((ii)(ii)) (ii)", 1, 2, 3, 4, 5, 6) (((1, 2), (3, 4)), (5, 6))
|