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++)相关推荐

  1. java中调用python

    在Java中调用Python </h1><div class="clear"></div><div class="postBod ...

  2. C++调用Python文件,TensorFlow和PyTorch构建的深度学习模型,无法使用GPU的情况分析。

    C++调用Python深度学习模型,包含TensorFlow和PyTorch等构造的模型,然后使用GPU出现问题.包含C++调用Python函数,C++加载模型到GPU,GPU内存占用过大,计算完毕内 ...

  3. 【Qt】Qt中调用python接口

    在Qt程序中调用python函数从步骤 1.在pro中添加python的头文件路径和库 INCLUDEPATH += /usr/include/python3.4 LIBS += -L /usr/li ...

  4. java可以调用python程序吗_我们可以从java调用python方法吗?

    是的,那可以做到.通常,这将通过创建PythonInterpreter对象然后使用它来调用python类来完成. 请考虑以下示例: Java: import org.python.core.PyIns ...

  5. linux 下C调用Python 模块

    2019独角兽企业重金招聘Python工程师标准>>> 最近做一个移植项目, 用到C调用Python, 在网上搜了好多资料,但是发现按照上面介绍的一步一步来, 根本行不通,最后还是根 ...

  6. python c#_【分享】C# 调用 Python 脚本, 与 Python 调用 C# 类库

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 C# 调用 Python 脚本 操作步骤 1.创建一个控制台程序. O0101_DotNetCallPython. 2.管理 Nuget 程序包,搜索 I ...

  7. Java调用python脚本

    Java调用python脚本 最近也是刚开始学python,所以这里写了一个简单的小方法用Java来调用python脚本.后期再进行更新. 1.Java启动程序的方法 在Java中提供了两种方法来启动 ...

  8. Java调用Python遇到的一系列问题与解决方案

    Java调用Python遇到的一系列问题与解决方案 参考文章: (1)Java调用Python遇到的一系列问题与解决方案 (2)https://www.cnblogs.com/CQUTWH/p/593 ...

  9. c++ 调用python

    这个可以: https://blog.csdn.net/pipisorry/article/details/49532341 C++调用python 在C/C++中嵌入Python,可以使用Pytho ...

  10. 在Java中调用Python

    写在前面 参考:https://www.cnblogs.com/nuccch/p/8435693.html 在微服务架构大行其道的今天,对于将程序进行嵌套调用的做法其实并不可取,甚至显得有些愚蠢.当然 ...

最新文章

  1. weblogic自带的jdk是在工程的包部署后编译使用
  2. rmmod: can't change directory to '/lib/modules': No such file or directory问题解决
  3. max 宏定义取消:error C2589: error C2059: 语法错误 : “::”
  4. 堆栈verilog设计实现及仿真
  5. 很朴素的学习嵌入式系统的经验
  6. 什么是Python脚本?
  7. python图论库_Python 图论工具
  8. typora代码块语言linux命令,typora工具的使用以及MarkDown语法
  9. 挖矿从入门到入狱,百度运维获利 10 万被判 3 年。网友:人生已毁
  10. MySQL 主主同步配置和主从配置步骤
  11. 高质量程序好文分享之王垠《编程的智慧》
  12. B站韩顺平java学习笔记(九)-- 面向对象编程(高级)章节
  13. OpenCV 单目摄像头(python版)
  14. Hadoop伪分布和全分布部署指南
  15. 2022-2028全球与中国机场自助服务市场现状及未来发展趋势
  16. gatekeeper实践
  17. 【Android 应用】小白之签名文件的生成。
  18. PHP获取真实客户端的真实IP
  19. 学好java应该读的几本书
  20. CSDN日报190923:盘点那些被AI换脸、一键“脱”衣所滥用的AI模型

热门文章

  1. linux kernl网址
  2. Scala基于Akka模拟Spark Master Worker进程间通信(一):Worker向Master注册
  3. scala中断循环代码示例
  4. docker 删除tag为none的docker镜像
  5. linux sort排序工具和uniq去重工具使用示例
  6. scala函数的定义语法说明
  7. 将redis当做使用LRU算法的缓存来使用
  8. AngularJS 快速编程入门
  9. php如何获取常量的值,php – 如何获取常量的名称?
  10. 第一行代码学习笔记第十章——探究服务