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 }
c调用python函数_C调用Python的函数
最新推荐文章于 2024-05-15 15:51:34 发布