linux c语言调用python脚本_linux平台下C语言调用python代码示例

本文展示了如何在Linux系统中使用C语言调用Python脚本。通过一个具体的例子,包括C调用代码(calladd.c)、Python脚本(pyadd.py)和Makefile,详细解释了调用过程。在完成Python和C环境的安装后,通过执行Makefile编译C代码,并运行生成的可执行文件,成功实现了C语言调用Python函数并打印结果。
摘要由CSDN通过智能技术生成

首先有三个部分,

1.python代码,名为pyadd.py,代码如下:

def add(a=1,b=1):

print "*************"

print "in python function add"

print "a="+str(a)

print "b="+str(b)

print "ret="+str(a+b)

return a+b

2.C调用代码,名为calladd.c,代码如下:

#include

#include

#include

int PyCall(const char * module,const char * function,const char * format,...){

PyObject * pModule=NULL;

PyObject * pFunc = NULL;

PyObject * pRet = NULL;

PyObject * pArgs = NULL;

PyRun_SimpleString("import sys");

PyRun_SimpleString("sys.path.append('./')");

if(!(pModule=PyImport_ImportModule(module))){

printf("error:1");

return -1;

}

if(!(pFunc = PyObject_GetAttrString(pModule,function))){

printf("error:2");

return -2;

}

va_list vargs;

va_start(vargs,format);

pArgs=Py_VaBuildValue(format,vargs);

va_end(vargs);

pRet=PyEval_CallObject(pFunc,pArgs);

int ret ;

PyArg_Parse(pRet,"i",&ret);

return ret;

}

int main(int argc,char ** agrv)

{

printf("This is main\n");

Py_Initialize();

printf("(in main )ret=%d\n",PyCall("pyadd","add","()"));

printf("(in main)ret=%d\n",PyCall("pyadd","add","(i)",10));

printf("(in main)ret=%d\n",PyCall("pyadd","add","(ii)",20,20));

Py_Finalize();

return 0;

}

3.Makefile,代码如下:

add:

gcc -I/usr/include/python2.4/ -L/usr/lib/ -lpython2.4 -o add calladd.c

clean:

rm -rf *.o add

在linux平台,当python及C 语言环境安装完成后,可参考(http://docs.python.org/3/c-api/index.html)理解C代码中函数用法。

简单说明一下执行过程,

1.在shell下执行:make     #需要在Makefile的当前目录下执行

2.执行新生成的add ,即可显示add结果

执行结果如下:

This is main ************* in python function add a=1 b=1 ret=2 (in main )ret=2 ************* in python function add a=10 b=1 ret=11 (in main)ret=11 ************* in python function add a=20 b=20 ret=40 (in main)ret=40

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值