C++调用python(C++)
C++源代码:python部分就是正常的python代码
1 #include <string.h> 2 #include <math.h> 3 #include "iostream" 4 #include "string" 5 #include "fstream" 6 #include <stdio.h> 7 #include <stdlib.h> 8 #include <sys/time.h> 9 #include <unistd.h> 10 #include "/usr/include/python2.6/Python.h" 11 using namespace std; 12 13 #define DEBUG_COUT 1 14 15 string str_tmp[5000][5000]; 16 int list_len = 0; 17 int val_num = 0; 18 19 int get_py_list(string py_file,string py_path) 20 { 21 string sys_path = "sys.path.append('"+py_path+"')";//系统搜索路径添加目标代码路径 22 23 Py_Initialize();//python编译器初始化,无返回值来判断是否初始化成功。需要配合Py_IsInitialized来确认 24 25 if(!Py_IsInitialized()) 26 { 27 cout<<"初始化python解释器失败,请确认python解析器是否正常安装!!!"<<endl; 28 return 0; 29 } 30 31 PyRun_SimpleString("import sys");//调用python语句,实际上是一个宏,执行一段Python代码。 32 PyRun_SimpleString(sys_path.c_str());//添加python可执行路径 33 34 //PyObject* modulename = Py_BuildValue("s", "py_file.c_str()"); //将C++类型转换为python类型。s表示python字符串 35 //PyObject* module = PyImport_Import(modulename); //返回值为NULL表示调用失败。这两行等同于下面这句 36 PyObject* get_envs_module = PyImport_ImportModule(py_file.c_str());//导入一个Python模块,参数name可以是*.py文件的文件名。类似Python内建函数import。 37 38 PyObject* get_envs_func = PyObject_GetAttrString(get_envs_module, "readFileFunc");//返回模块对象o中的attr_name 属性或函数,相当于Python中表达式语句o.attr_name 39 40 PyObject* args = Py_BuildValue("(iiss)", 5, 0,"1219.txt", "Outagesked::天津"); 41 PyObject* func_ret_val = PyObject_CallObject(get_envs_func, NULL); //此函数有两个参数,而且都是Python对象指针,其中pfunc是要调用的Python 函数,一般说来可以使用PyObject_GetAttrString()获得。 42 //第二个参数pargs是函数的参数列表,通常是使用Py_BuildValue()来构建。 43 44 PyObject *list_item = NULL; //python类型的列表元素 45 46 list_len = PyList_Size(func_ret_val); //获取列表长度 47 #ifdef DEBUG_COUT 48 cout<<"list_len is "<<list_len<<endl; 49 #endif 50 51 for (int i = 0; i < list_len; i++) 52 { 53 PyObject *list_item = PyList_GetItem(func_ret_val, i);//根据下标i取出python列表中的元素 54 55 val_num = PyList_Size(list_item); //List对象子元素的大小,这里NumOfItems = 3 56 #ifdef DEBUG_COUT 57 cout<<" val_num is "<<val_num<<endl; 58 #endif 59 60 for(int Index_k = 0; Index_k < val_num; Index_k++) 61 { 62 PyObject *list_item_sub = PyList_GetItem(list_item, Index_k);//遍历List对象中子元素中的每个元素 63 str_tmp[i][Index_k] = PyString_AsString(list_item_sub);//转换为c类型的数据 64 //cout<<str_tmp[i][Index_k]<<endl; 65 Py_DECREF(list_item_sub); //释放空间 66 } 67 Py_DECREF(list_item); //释放python创建对象的引用计数。否则容易引起内存泄漏 68 if(i == list_len-1) 69 { 70 Py_Finalize(); //用于关闭Python解释器,释放解释器所占用的资源 71 return 0; 72 } 73 } 74 Py_Finalize(); //用于关闭Python解释器,释放解释器所占用的资源 75 return 0; 76 } 77 78 int main(int argc,char **argv) 79 { 80 string py_file = "readFile"; 81 string py_path = "/root/cpp_make/py_dir"; 82 83 get_py_list(py_file,py_path); 84 85 #ifdef DEBUG_COUT 86 cout<<"list_len is "<<list_len<<" val_num is "<<val_num<<endl; 87 #endif 88 89 for(int i=0;i<list_len;i++) 90 { 91 for(int j=0;j<val_num;j++) 92 { 93 cout<<str_tmp[i][j]<<" "; 94 } 95 cout<<endl; 96 } 97 98 return 0; 99 }
转载于:https://www.cnblogs.com/linux-wang/p/9001418.html
C++调用python(C++)相关推荐
- java中调用python
在Java中调用Python </h1><div class="clear"></div><div class="postBod ...
- C++调用Python文件,TensorFlow和PyTorch构建的深度学习模型,无法使用GPU的情况分析。
C++调用Python深度学习模型,包含TensorFlow和PyTorch等构造的模型,然后使用GPU出现问题.包含C++调用Python函数,C++加载模型到GPU,GPU内存占用过大,计算完毕内 ...
- 【Qt】Qt中调用python接口
在Qt程序中调用python函数从步骤 1.在pro中添加python的头文件路径和库 INCLUDEPATH += /usr/include/python3.4 LIBS += -L /usr/li ...
- java可以调用python程序吗_我们可以从java调用python方法吗?
是的,那可以做到.通常,这将通过创建PythonInterpreter对象然后使用它来调用python类来完成. 请考虑以下示例: Java: import org.python.core.PyIns ...
- linux 下C调用Python 模块
2019独角兽企业重金招聘Python工程师标准>>> 最近做一个移植项目, 用到C调用Python, 在网上搜了好多资料,但是发现按照上面介绍的一步一步来, 根本行不通,最后还是根 ...
- python c#_【分享】C# 调用 Python 脚本, 与 Python 调用 C# 类库
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 C# 调用 Python 脚本 操作步骤 1.创建一个控制台程序. O0101_DotNetCallPython. 2.管理 Nuget 程序包,搜索 I ...
- Java调用python脚本
Java调用python脚本 最近也是刚开始学python,所以这里写了一个简单的小方法用Java来调用python脚本.后期再进行更新. 1.Java启动程序的方法 在Java中提供了两种方法来启动 ...
- Java调用Python遇到的一系列问题与解决方案
Java调用Python遇到的一系列问题与解决方案 参考文章: (1)Java调用Python遇到的一系列问题与解决方案 (2)https://www.cnblogs.com/CQUTWH/p/593 ...
- c++ 调用python
这个可以: https://blog.csdn.net/pipisorry/article/details/49532341 C++调用python 在C/C++中嵌入Python,可以使用Pytho ...
- 在Java中调用Python
写在前面 参考:https://www.cnblogs.com/nuccch/p/8435693.html 在微服务架构大行其道的今天,对于将程序进行嵌套调用的做法其实并不可取,甚至显得有些愚蠢.当然 ...
最新文章
- weblogic自带的jdk是在工程的包部署后编译使用
- rmmod: can't change directory to '/lib/modules': No such file or directory问题解决
- max 宏定义取消:error C2589: error C2059: 语法错误 : “::”
- 堆栈verilog设计实现及仿真
- 很朴素的学习嵌入式系统的经验
- 什么是Python脚本?
- python图论库_Python 图论工具
- typora代码块语言linux命令,typora工具的使用以及MarkDown语法
- 挖矿从入门到入狱,百度运维获利 10 万被判 3 年。网友:人生已毁
- MySQL 主主同步配置和主从配置步骤
- 高质量程序好文分享之王垠《编程的智慧》
- B站韩顺平java学习笔记(九)-- 面向对象编程(高级)章节
- OpenCV 单目摄像头(python版)
- Hadoop伪分布和全分布部署指南
- 2022-2028全球与中国机场自助服务市场现状及未来发展趋势
- gatekeeper实践
- 【Android 应用】小白之签名文件的生成。
- PHP获取真实客户端的真实IP
- 学好java应该读的几本书
- CSDN日报190923:盘点那些被AI换脸、一键“脱”衣所滥用的AI模型