您的位置:首页 > 编程语言 > C语言/C++

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 c语言