C++源代码:python部分就是正常的python代码

 #include    <string.h>
#include <math.h>
#include "iostream"
#include "string"
#include "fstream"
#include <stdio.h>
#include <stdlib.h>
#include <sys/time.h>
#include <unistd.h>
#include "/usr/include/python2.6/Python.h"
using namespace std; #define DEBUG_COUT 1 string str_tmp[][];
int list_len = ;
int val_num = ; int get_py_list(string py_file,string py_path)
{
string sys_path = "sys.path.append('"+py_path+"')";//系统搜索路径添加目标代码路径 Py_Initialize();//python编译器初始化,无返回值来判断是否初始化成功。需要配合Py_IsInitialized来确认 if(!Py_IsInitialized())
{
cout<<"初始化python解释器失败,请确认python解析器是否正常安装!!!"<<endl;
return ;
} PyRun_SimpleString("import sys");//调用python语句,实际上是一个宏,执行一段Python代码。
PyRun_SimpleString(sys_path.c_str());//添加python可执行路径 //PyObject* modulename = Py_BuildValue("s", "py_file.c_str()"); //将C++类型转换为python类型。s表示python字符串
//PyObject* module = PyImport_Import(modulename); //返回值为NULL表示调用失败。这两行等同于下面这句
PyObject* get_envs_module = PyImport_ImportModule(py_file.c_str());//导入一个Python模块,参数name可以是*.py文件的文件名。类似Python内建函数import。 PyObject* get_envs_func = PyObject_GetAttrString(get_envs_module, "readFileFunc");//返回模块对象o中的attr_name 属性或函数,相当于Python中表达式语句o.attr_name PyObject* args = Py_BuildValue("(iiss)", , ,"1219.txt", "Outagesked::天津");
PyObject* func_ret_val = PyObject_CallObject(get_envs_func, NULL); //此函数有两个参数,而且都是Python对象指针,其中pfunc是要调用的Python 函数,一般说来可以使用PyObject_GetAttrString()获得。
//第二个参数pargs是函数的参数列表,通常是使用Py_BuildValue()来构建。 PyObject *list_item = NULL; //python类型的列表元素 list_len = PyList_Size(func_ret_val); //获取列表长度
#ifdef DEBUG_COUT
cout<<"list_len is "<<list_len<<endl;
#endif for (int i = ; i < list_len; i++)
{
PyObject *list_item = PyList_GetItem(func_ret_val, i);//根据下标i取出python列表中的元素 val_num = PyList_Size(list_item); //List对象子元素的大小,这里NumOfItems = 3
#ifdef DEBUG_COUT
cout<<" val_num is "<<val_num<<endl;
#endif for(int Index_k = ; Index_k < val_num; Index_k++)
{
PyObject *list_item_sub = PyList_GetItem(list_item, Index_k);//遍历List对象中子元素中的每个元素
str_tmp[i][Index_k] = PyString_AsString(list_item_sub);//转换为c类型的数据
//cout<<str_tmp[i][Index_k]<<endl;
Py_DECREF(list_item_sub); //释放空间
}
Py_DECREF(list_item); //释放python创建对象的引用计数。否则容易引起内存泄漏
if(i == list_len-)
{
Py_Finalize(); //用于关闭Python解释器,释放解释器所占用的资源
return ;
}
}
Py_Finalize(); //用于关闭Python解释器,释放解释器所占用的资源
return ;
} int main(int argc,char **argv)
{
string py_file = "readFile";
string py_path = "/root/cpp_make/py_dir"; get_py_list(py_file,py_path); #ifdef DEBUG_COUT
cout<<"list_len is "<<list_len<<" val_num is "<<val_num<<endl;
#endif for(int i=;i<list_len;i++)
{
for(int j=;j<val_num;j++)
{
cout<<str_tmp[i][j]<<" ";
}
cout<<endl;
} return ;
}

最新文章

  1. android小技巧(一)
  2. 激活神器 KMSAuto Net 2015 v1.3.8
  3. 区别typedef和#define
  4. 软工UML学习札记
  5. CSU 1616: Heaps(区间DP)
  6. python中使用traceback来追踪异常
  7. SQL查询多条不重复记录值简要解析【转载】
  8. 排序算法Java实现(选择排序)
  9. Python之旅.第三章.函数3.26
  10. WPF中在MVVM模式下,后台绑定ListCollectionView事件触发问题
  11. Tornado基本应用
  12. python学习-判断是否是IP地址
  13. IOS初级:UIAlertController
  14. SQL Server如何附加只有mdf的数据库文件
  15. MySQL 性能测试
  16. jQuery学习-属性选择器
  17. css快速入门-引入方式
  18. python小数据池,代码块的最详细、深入剖析
  19. 系列文章--Enterprise Library文章总结
  20. 【BZOJ4819】【SDOI2017】新生舞会 [费用流][分数规划]

热门文章

  1. zabbix--源码安装部署zabbix3.2
  2. ios网络学习------2 用非代理方法实现同步post请求
  3. Unity3D中动态创建编辑轴(点,线,圆,圆锥)
  4. the blank final field factors may not have been initialized
  5. shell脚本实现批量端口扫描
  6. Linux下安装.NETCore3.0
  7. 解决小程序sessionid不一致
  8. 解决 AUTH` failed: ERR Client sent AUTH, but no password is set [tcp://127.0.0.1:6379]
  9. Shell [[]]详解:检测某个条件是否成立
  10. python的format函数是什么意思format是什么意思