C/C++中调用执行python脚本文件

本文详细介绍了如何在C++服务程序中调用并执行现有的Python脚本文件,包括初始化Python环境、导入模块、执行脚本及关闭Python解释器的步骤,并通过实例演示了整个过程。

前几天因为工作需要,想在C++服务程序中调用执行现有的python脚本文件,所以查了一下这方面的材料,现在做个小结。
目前的C/C++与python的混合编程分为两大类:
1、使用python调用c/c++编写的扩展库,扩展python的功能,我们暂且称为python调用c/c++
2、使用c/c++程序调用执行python中定义的函数等,我们暂且称为c/c++调用python
本文只针对c/c++调用执行python作一方面的介绍,如有不正确的地方,还请诸位批评指正。
目前,主流的用法是把python作为一种文本形式的链接库,在c/c++程序中调用其中定义的函数,这方面的资料很多,本文就不在赘述了,本文重点介绍一种完整调用python脚本文件及参数的方法,闲话少说,上例子:
以下是测试用的python脚本文件,功能是输出命令行参数:sample.py

# !/usr/bin/env python2.7
import sys
def test():
    for arg in sys.argv:
        print arg

if __name__=='__main__':
    test()

以下是测试用的c++程序文件:test.c++

#include "python2.7/Python.h"
int main(int argc, char* argv[])
{
	//第一步:初始化Python
	//在调用Python的提供的给C的API之前,通过执行初始化
	//来添加Python的内建模块、__main__、sys等
	Py_Initialize();

	//检查初始化是否完成
	if (!Py_IsInitialized())
	{
		return -1;
	}
	
	//第二步:导入sys模块
	PyRun_SimpleString("import sys");
	
	//第三步:导入执行脚本时的命令行参数,如:./sample.py arg1 arg2
	//PyRun_SimpleString("sys.argv['arg1','arg2']"); 有网友反馈这条命令不可用了,用下面的可以替换下
	PySys_SetArgv(argc, argv);
	
	//第四步:执行调用脚本文件命令,注意文件的路径
	if (PyRun_SimpleString("execfile('./sample.py')") == NULL)
	{
		return -1;
	}
	
	//第五步:关闭Python解释器
	Py_Finalize();
	return 0;
}

编译指令:

g++ -g -W -o test test.cpp -I /usr/include/ -L /usr/lib64/ -l python2.7

执行指令:./testarg1 arg2
输出:

arg1
arg2
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值