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[][];
  16. int list_len = ;
  17. int val_num = ;
  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
  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)", , ,"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 = ; 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 = ; 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-)
  69. {
  70. Py_Finalize(); //用于关闭Python解释器,释放解释器所占用的资源
  71. return ;
  72. }
  73. }
  74. Py_Finalize(); //用于关闭Python解释器,释放解释器所占用的资源
  75. return ;
  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=;i<list_len;i++)
  90. {
  91. for(int j=;j<val_num;j++)
  92. {
  93. cout<<str_tmp[i][j]<<" ";
  94. }
  95. cout<<endl;
  96. }
  97.  
  98. return ;
  99. }

C++调用python(C++)的更多相关文章

  1. cpp 调用python

    在用cpp调用python时, 出现致命错误: no module named site  ,  原因解释器在搜索路径下没有找到python库.可以在调用Py_Initialize前,调用 Py_Se ...

  2. c调用python

    #include <Python.h>//python33(python2.x有几个函数不对应) /* PyImport_ImportModule 导入一个Python模块并返回它的指针 ...

  3. linux+php+apache web调用python脚本权限问题解决方案

    lamp : linux + apache + mysql + php 在上篇随笔中linux+php+apache调用python脚本时出现的问题的根本原因是:apache运行时使用的apache用 ...

  4. linux+php+apache web调用python脚本权限问题

    lamp : linux + apache + mysql + php 在近期项目中使用 linux + apache + php调用python脚本是出现以下权限问题: build/bdist.li ...

  5. C#中调用python方法

    最近因为项目设计,有部分使用Python脚本,因此代码中需要调用python方法. 1.首先,在c#中调用python必须安装IronPython,在 http://ironpython.codepl ...

  6. PHP 调用Python脚本

    上次做用户反馈自动翻译,写了个python脚本,将日文的用户反馈翻译成中文,效果虽然可以,但其它不懂python的童鞋就没法使用了,所以搭了个web服务,让其他人可以通过网页访问查询.使用的是apac ...

  7. C++中调用Python脚本

    C++中调用Python脚本的意义就不讲了,至少你可以把它当成文本形式的动态链接库, 需要的时候还可以改一改,只要不改变接口, C++的程序一旦编译好了,再改就没那么方便了 先看Python的代码 代 ...

  8. java调用python代码

    同样的我们需要安装jython,具体的步骤如下: 1. 去 http://sourceforge.net/projects/jython/ 下载最新的jython相关的jar包. 2. 下载下来的ja ...

  9. C++调用python

    本文以实例code讲解 C++ 调用 python 的方法. 本文在util.h中实现三个函数: 1. init_log: 用google log(glog)初始化log 2. exe_command ...

  10. C#调用Python 脚本语言

    1. 安装IronPython http://pan.baidu.com/s/1qW4jNJ2  下载IronPython 2.7 安装下载下来的安装包 2. 创建项目 创建一个C#的Windows窗 ...

随机推荐

  1. Raft——可理解的分布式一致性算法

    Raft  Understandable Distributed Consensus http://thesecretlivesofdata.com/raft/ 一个直观的动画,便于理解raft算法. ...

  2. Pregel Master

  3. fedora 28 missing PROG bison

    yum install bison Missing PROG dlltool Missing PROG flex Missing PROG mt

  4. 笔记49 在Spittr应用中整合Hibernate

    在前边构建的Spittr应用中整合Hibernate 由于最近所学的hibernate都是使用xml方式进行配置的,所以在与以Java方式配置的Spittr应用结合时就会出现一些小问题,在此进行总结. ...

  5. mysql数据分组

    创建分组 分组是在SELECT语句中的GROUP BY 子句中建立的. 例: SELECT vend_id, COUNT(*) AS num_prods FROM products GROUP BY ...

  6. Tools: CGAL 安装指南

    环境:Microsoft Win7 SP1 Visual Studio 2015 SP3 参考: https://blog.csdn.net/milkpku/article/details/50241 ...

  7. 13. this关键字

    1.this的概述 this关键字代表是对象的引用.也就是this在指向一个对象,所指向的对象就是调用该函数的对象引用. 2.this实例,初始化成员变 class Employee { privat ...

  8. leetcood学习笔记-171-excel表列序号

    题目描述: 方法: class Solution: def titleToNumber(self, s: str) -> int: num = 0 r = 1 for i in s[::-1]: ...

  9. Java-Class-FC:java.nio.charset.StandardCharsets

    ylbtech-Java-Class-FC:java.nio.charset.StandardCharsets 1.返回顶部   2.返回顶部 1.1.import java.nio.charset. ...

  10. jdk linux配置

    用文本编辑器打开/etc/profile 在profile文件末尾加入: export JAVA_HOME=/usr/share/jdk1.6.0_14 export PATH=$JAVA_HOME/ ...