c调用python函数_C调用Python的函数

1 /*2 module: Python脚步的模块名3 function: 要调用的函数名4 format: 传递给Py_VaBuildValue函数的可变参数模板5 */6 intPyCall(constchar*module,constchar*function,constchar*format, ... )7 {8 PyObject*pMod=NULL;9 PyObject*pFunc=NULL;10 PyObject*pParm=NULL;11 PyObject*pRetVal=NULL;12 13 //导入模块14 if(!(pMod=PyImport_ImportModule(module) ) ){15 return-1;16 }17 //查找函数18 if(!(pFunc=PyObject_GetAttrString(pMod, function) ) ){19 return-2;20 }21 22 //创建参数23 va_list vargs;24 va_start( vargs, format );25 pParm=Py_VaBuildValue( format, vargs );26 va_end(vargs);27 28 //函数调用29 pRetVal=PyEval_CallObject( pFunc, pParm);30 31 //假定返回值为整形32 intret;33 PyArg_Parse( pRetVal,"i",&ret );34 returnret;35 }36 37 intmain(intargc,char*argv[])38 {39 Py_Initialize();40 41 /*这做个简单的说明42 ** format参数用()扩起来是表示元组的意思。元组中的个数对应Python脚本中的参数。43 ** 因为fun,fun1,fun2函数的参数个数分别是 0,1,2,所以,元组中的个数必须为0,1,2,不然调用将失44 ** 败。当然,元组中的每个元素都是可以为任意的类型,比如:45 ** PyCall( "pytest", "fun2", "( i,{s:s,s:s})", 2, "name", "linxr", "age", "25" );46 */47 printf("ret = %d\n", PyCall("pytest","fun","()");48 printf("ret = %d\n", PyCall("pytest","fun1","(i)",12);49 printf("ret = %d\n", PyCall("pytest","fun2","(is)",12,"12");50 51 Py_Finalize();52 53 return0;54 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值