C++中嵌入python程序——命令行模式
2016-07-22 10:54
295 查看
C++中嵌入python程序——命令行模式
最近写个程序,由于需要使用C++框架,但是一部分功能是基于python的,所以需要利用C++调用python程序。虽然你知道python有相关的API接口,但是为了省事,我想到一个最简单的模式——C++程序中使用命令行模式调用python。本文先介绍命令行模式调用python,在下一篇博客中,我会继续介绍如何使用API接口调用python
命令行模式的好处是C++和 python可以各干各的,互不干涉,而且各自的环境无需根据工程重新配置,只需准备好各自的程序,接着就是命令行代码的问题了。
先声明一下,我的C++是在vs2010下编写的,python版本2.7.12
首先是python程序,以下只是举个简单的例子,但是这个框架是通用的,大家不必担心。该程序打印一行字符串,自己看。。。:),文件名是hello.py,这个文件名C++要用到,把它放到C++工程目录里面。
#!/usr/bin/env python # -*- coding:utf8 -*- import os import sys def hello(): print 'hello! I am python!' if __name__ == '__main__': hello()
然后就是C++程序了,C++里我没有加别的功能,只是写了命令行代码,直接调用python文件。
#include <iostream> #include <stdio.h> #include <stdlib.h> #include <string.h> using namespace std; int main() { cout << "--------Testing---------" << endl; system("python hello.py"); system("pause"); return 0; }
你看了之后会觉得,这么简单?是的,就是这么简单。
但是还有一个问题,刚才的程序没有参数传递,要是C++要向python传递参数,同时C++也想要获得python的返回值怎么办?没事,我们换一种方式——使用_popen()
下面,我们开始重新写一下代码
python代码我还是用刚才的,但是为了返回正确的值,我稍微修改一点点。(文件名不变)
#!/usr/bin/env python # -*- coding:utf8 -*- import os import sys def hello(): print 'hello! I am python!\0' if __name__ == '__main__': hello()
看到有什么区别了吗?好吧,我承认确实没什么区别,只是print里面加了个\0。。。这是为方便C++判断而添加的,C++会将 python打印的内容视为其返回值。
下面来看看C++代码
#include <iostream> #include <stdio.h> #include <stdlib.h> #include <string.h> using namespace std; int main() { cout << "--------Testing---------" << endl; FILE *pf=_popen("python hello.py","r"); char res[100]; fread(res, 100, 1, pf); _pclose(pf); printf("cmd return is \"%s\"\n", res); system("pause"); return 0; }
OK,现在C++已经能调用python程序了,而且实现起来简单,但是感觉还是不够灵活,下一篇博客我会接着介绍将python利用python/c API接口将python真正嵌套到C++程序中,到时候我们想对python怎么样就怎么样,因为它将与C++融为一体。
相关文章推荐
- Python动态类型的学习---引用的理解
- Python3写爬虫(四)多线程实现数据爬取
- 垃圾邮件过滤器 python简单实现
- 下载并遍历 names.txt 文件,输出长度最长的回文人名。
- 如何组织构建多文件 C 语言程序(二)
- install and upgrade scrapy
- Scrapy的架构介绍
- Centos6 编译安装Python
- 使用Python生成Excel格式的图片
- 让Python文件也可以当bat文件运行
- [Python]推算数独
- Python中zip()函数用法举例
- Python中map()函数浅析
- Python将excel导入到mysql中
- Python在CAM软件Genesis2000中的应用
- 如何写好 C main 函数
- 使用Shiboken为C++和Qt库创建Python绑定
- FREEBASIC 编译可被python调用的dll函数示例