Python与C++进行交互
2014-08-17 08:51
239 查看
版本 Python 2.6
IDE Microsoft Visual Studio 2008
C++调用Python脚本
1.
Py_Initialize() 初始化Python,两者要对应。
Py_Finalize() 清理Python
2. 导入Python模块
PyObject *pModule = PyImport_ImportModule("testHello");
注意: 不要加上.py, VC环境不要用test的文件名。
3. 获取Python脚本内的函数
PyObject *pFunc = PyObject_GetAttrString(pModule, "Hello");
4. 调用Python函数, 无参数
PyEval_CallObject(pFunc, NULL);
5. 调用Python函数,传参数
PyObject *pArgs = Py_BuildValue("(s)", "thank you all the same");
注意: 传递的格式必须是tuple元组。也就是要加上()。否则就脚本异常。
6. 处理返回值
PyEval_CallObject调用后会返回。
PyObject *pResult = PyEval_CallObject(pFunc, pArgs);
返回一个整型,使用&。
int i = 0;
PyArg_Parse(pResult, "i", &i);
返回一个浮点型
float d = 0.1f;
PyArg_Parse(pResult, "f", &d);
返回一个字符串
char* s = "";
PyArg_Parse(pResult, "s", &s);
注意: 在C/C++内,如果直接将&s写成s,是可以的。
但在与Python 2.6交互时,要写成&s,是指针的指针。否则将
产生异常。
7. 每一个PyObject* 记得在不需要时用Py_DECREF要销毁。
8. 返回值是Tuple元组数据
返回值是List列表数据
返回值是Dict字典数据
PyTuple_New 新建元组
PyTuple_Size 获取元组大小
PyTuple_GetItem 获取单条元素
PyTuple_SetItem 插入新元素
IDE Microsoft Visual Studio 2008
C++调用Python脚本
1.
Py_Initialize() 初始化Python,两者要对应。
Py_Finalize() 清理Python
2. 导入Python模块
PyObject *pModule = PyImport_ImportModule("testHello");
注意: 不要加上.py, VC环境不要用test的文件名。
3. 获取Python脚本内的函数
PyObject *pFunc = PyObject_GetAttrString(pModule, "Hello");
4. 调用Python函数, 无参数
PyEval_CallObject(pFunc, NULL);
5. 调用Python函数,传参数
PyObject *pArgs = Py_BuildValue("(s)", "thank you all the same");
注意: 传递的格式必须是tuple元组。也就是要加上()。否则就脚本异常。
6. 处理返回值
PyEval_CallObject调用后会返回。
PyObject *pResult = PyEval_CallObject(pFunc, pArgs);
返回一个整型,使用&。
int i = 0;
PyArg_Parse(pResult, "i", &i);
返回一个浮点型
float d = 0.1f;
PyArg_Parse(pResult, "f", &d);
返回一个字符串
char* s = "";
PyArg_Parse(pResult, "s", &s);
注意: 在C/C++内,如果直接将&s写成s,是可以的。
但在与Python 2.6交互时,要写成&s,是指针的指针。否则将
产生异常。
7. 每一个PyObject* 记得在不需要时用Py_DECREF要销毁。
8. 返回值是Tuple元组数据
返回值是List列表数据
返回值是Dict字典数据
PyTuple_New 新建元组
PyTuple_Size 获取元组大小
PyTuple_GetItem 获取单条元素
PyTuple_SetItem 插入新元素
相关文章推荐
- C++程序员学Python:C与Python进行交互
- C++程序员学Python:C与Python进行交互
- Python 与 C++ 的交互编程
- 使用SWIG和Python对C/C++进行单元测试(二)
- c++ python交互之boost.python 简集之Vector(map)混合使用
- 最近进行python和c++混合语言开发的一点体会
- Python的subprocess子进程和管道进行交互
- S-PLUS中使用CONNECT/C++模块与C++进行交互
- 利用SWIG对C++库进行Python包装
- c++ python交互之boost.python 简集之序列化(pickle)
- c++ python交互之boost.python 简集之 vector处理
- 使用python的内置ctypes模块与c、c++写的dll进行交互
- python与c++交互学习入门之5
- c++ python交互之boost.python 简集之类(class , struct)
- c++ python交互之boost.python 简集之普通函数
- c++ python交互之boost.python 简集之序列化(pickle)
- 使用SWIG和Python对C/C++进行单元测试(一)
- c++ python交互之boost.python 简集之普通函数
- c++ python交互之boost.python 简集之类成员变量设置
- C++ python 交互之 python.dict to c++ map