c++调用python详解(多输入多输出)
来源:互联网 发布:淘宝卖家不给发票 编辑:程序博客网 时间:2024/06/05 19:09
Linux 下 c++调用python程序示例,python函数的输入输出皆为数组形式
环境 Ubuntu python2.7 c++11
自己整理的代码,希望大家也能参考使用到
c++程序如下 mycpp.cpp:
#include <Python.h>#include <iostream>#include <vector>int main(){PyObject* pyName;PyObject* pyModule;PyObject* pyDict;PyObject* pyFunc;PyObject* pyArgs;//初始化python解释器Py_Initialize();if (!Py_IsInitialized()) {return false;}//开始使用PyRun_SimpleString 运行python语句, 设置被调用的python脚本的全路径PyRun_SimpleString("import sys");PyRun_SimpleString("sys.path.append('./')");//导入python脚本文件testpy.py,此处的脚本文件名不需要加扩展名pyName = PyString_FromString("mypy");//加载python模型,作用类似python的 importpyModule = PyImport_Import(pyName); if (!pyModule) {printf("can't find mypy.py\n");return false;}//取得模块接口字典信息pyDict = PyModule_GetDict(pyModule);if (!pyDict) {return false;}//获取需要使用的接口句柄pyFunc = PyDict_GetItemString(pyDict, "doubleArray");if (!pyFunc || !PyCallable_Check(pyFunc)) {printf("can't find function [doubleArray]\n");return false;}//开始准备调用python函数, 接口的输入和输出均为size为5的Tuple类型, Tuple元素均为doublePyObject* pytuple = PyTuple_New(5);for (int i = 0; i < 5; ++i) {PyTuple_SetItem(pytuple, i, Py_BuildValue("d", (double)i));}pyArgs = PyTuple_New(1);PyTuple_SetItem(pyArgs, 0, pytuple);//调用接口,取得返回值PyObject* pyResult = PyObject_CallObject(pyFunc, pyArgs);//解析结果int size = PyList_Size(pyResult);std::vector<double> result;double tmp;for (int i = 0; i < size; ++i) {PyArg_Parse(PyList_GET_ITEM(pyResult, i), "d", &tmp);result.push_back(tmp);}//打印处理结果for (auto item : result) {std::cout << item << " ";}std::cout<<std::endl;//删除python object变量Py_DECREF(pyArgs);Py_DECREF(pyFunc);Py_DECREF(pyDict);Py_DECREF(pyModule);Py_DECREF(pyName);return 0;}
Python 程序如下 mypy.py:
import os,sysdef doubleArray(arr): list_ = [] for item in arr: list_.append(item*2) return list_
运行结果:
cpp_call_python# g++ -std=c++11 mycpp.cpp -o mycpp.out -I/usr/include/python2.7/ -lpython2.7
cpp_call_python# ./mycpp.out
0 2 4 6 8
cpp_call_python#
0 0
- c++调用python详解(多输入多输出)
- C语言进阶之路------字符串的反序输出(输入字符串然后调用函数反序输出)
- Python基本语法_输入/输出语句详解
- c语言进行数据的多输入多输出
- Python学习(一)----输入和输出
- python学习(3)输入和输出
- [python]文件操作(输入、输出)
- Python基础二(输入与输出)
- python 输入、输出、文件
- python 输入和输出
- python输入和输出
- Python输入和输出
- python 输入与输出
- Python 输入和输出
- Python 输入与输出
- Python输入和输出
- ”单层多输入单输出“BP神经网络(公式+c 代码)
- C程序设计语言(五)输入与输出
- ubuntu64 安装jd-gui
- 1063.计算谱半径(20)
- Python eval()函数
- App采用Https的解决方案
- php 最基础优化代码
- c++调用python详解(多输入多输出)
- IOS网络开发NSURLSession(二)DataTask+Demo
- Android性能优化(三)之内存管理
- 中国计算机学会推荐国际学术期刊
- 漫谈中小企业网络构建和维护
- React 笔记
- node.js npm包安装
- Android学习日常
- spring集成Jedis Cluster配置