C++调用python(C++)
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 ;
}
C++调用python(C++)的更多相关文章
- cpp 调用python
在用cpp调用python时, 出现致命错误: no module named site , 原因解释器在搜索路径下没有找到python库.可以在调用Py_Initialize前,调用 Py_Se ...
- c调用python
#include <Python.h>//python33(python2.x有几个函数不对应) /* PyImport_ImportModule 导入一个Python模块并返回它的指针 ...
- linux+php+apache web调用python脚本权限问题解决方案
lamp : linux + apache + mysql + php 在上篇随笔中linux+php+apache调用python脚本时出现的问题的根本原因是:apache运行时使用的apache用 ...
- linux+php+apache web调用python脚本权限问题
lamp : linux + apache + mysql + php 在近期项目中使用 linux + apache + php调用python脚本是出现以下权限问题: build/bdist.li ...
- C#中调用python方法
最近因为项目设计,有部分使用Python脚本,因此代码中需要调用python方法. 1.首先,在c#中调用python必须安装IronPython,在 http://ironpython.codepl ...
- PHP 调用Python脚本
上次做用户反馈自动翻译,写了个python脚本,将日文的用户反馈翻译成中文,效果虽然可以,但其它不懂python的童鞋就没法使用了,所以搭了个web服务,让其他人可以通过网页访问查询.使用的是apac ...
- C++中调用Python脚本
C++中调用Python脚本的意义就不讲了,至少你可以把它当成文本形式的动态链接库, 需要的时候还可以改一改,只要不改变接口, C++的程序一旦编译好了,再改就没那么方便了 先看Python的代码 代 ...
- java调用python代码
同样的我们需要安装jython,具体的步骤如下: 1. 去 http://sourceforge.net/projects/jython/ 下载最新的jython相关的jar包. 2. 下载下来的ja ...
- C++调用python
本文以实例code讲解 C++ 调用 python 的方法. 本文在util.h中实现三个函数: 1. init_log: 用google log(glog)初始化log 2. exe_command ...
- C#调用Python 脚本语言
1. 安装IronPython http://pan.baidu.com/s/1qW4jNJ2 下载IronPython 2.7 安装下载下来的安装包 2. 创建项目 创建一个C#的Windows窗 ...
随机推荐
- 令人清爽的异步函数async、await
1.什么是async.await? async用于声明一个函数是异步的.而await从字面意思上是"等待"的意思,就是用于等待异步完成.并且await只能在async函数中使用; ...
- Unity中对注册表进行修改
问题背景: PC端软件开发,当我在Unity中的PlayerSetting中设置好分辨率,每次打包运行后会记忆上次退出时窗口的分辨率(记忆窗口状态),导致下次打开时不是PlayerSetting中的初 ...
- webpack 配置之入门二(css 篇)
在项目中我们通过 css 来美化页面,css 也成为了网站不可或缺的一部分,这章节主要介绍 webpack 处理 css 部分, 1.webpack 处理 css 在 webpack 中,我们通过 s ...
- wbinfo - 向winbind服务查询信息
总览 SYNOPSIS wbinfo [-a user%password] [-c username] [-C groupname] [--domain domain] [-I ip] [-s sid ...
- 15_TLB中的G属性
> TLB 是为了增加访问内存的效率 即 如果 是 29 9 12 分页 请求数据 可能需要访问 4次内存:为了解决这个问题:出现了 TLB (虚拟地址到物理地址的转换关系),如果目标地址在TL ...
- PHP获取远程客户端真实IP的办法!
(1).REMOTE_ADDR:浏览当前页面的用户计算机的ip地址 (2).HTTP_X_FORWARDED_FOR: 浏览当前页面的用户计算机的网关 (3).HTTP_CLIENT_IP:客户端的i ...
- wordpress非弹窗表单多文件上传插件
插件名:Drag and Drop Multiple File Upload - Contact Form 7 (ps:如果是弹窗表单,不要使用这个插件Drag and Drop Multiple F ...
- 线段树区间离散化维护按秩合并并查集(可撤销)——牛客多校第八场E
模板题..去网上学了可撤销的并查集.. /* 给定一个无向图,边的属性为(u,v,l,r),表示<u,v>可以通过的size为[l,r] 求出有多少不同的size可以从1->n 把每 ...
- char*转LPCWSTR【转载】
文章转载自https://blog.csdn.net/zhouxuguang236/article/details/8761497 通过MultiByteToWideChar函数转换 MultiByt ...
- HDU3342:判断有向图中是否存在3元环-Tarjan或拓扑排序
题目大意: 给你一个关系图,判断是否合法.每个人都有师父和徒弟,可以有很多个: 若A是B的师父,B是C的师父,则A也算C的师父. 不合法: 1) . 互为师徒:(有回路) 2) .你的师父是你徒弟 ...