c调用python函数_python - Linux C调用Python 函数

1 #include

2 #include

3 #include

4

5 int main(int argc,char **argv){6 //初始化,载入python的扩展模块

7 Py_Initialize();8 //判断初始化是否成功

9 if(!Py_IsInitialized()){10 printf("Python init failed!\n");11 return -1;12 }13 //PyRun_SimpleString 为宏,执行一段python代码14 //导入当前路径

15 PyRun_SimpleString("import sys");16 PyRun_SimpleString("sys.path.append('./')");17

18 PyObject *pName =NULL;19 PyObject *pModule =NULL;20 PyObject *pDict =NULL;21 PyObject *pFunc =NULL;22 PyObject *pArgs =NULL;23

24 //加载名为py_add的python脚本

25 pName = PyString_FromString("py_add");26 pModule =PyImport_Import(pName);27 if(!pModule){28 printf("Load py_add.py failed!\n");29 getchar();30 return -1;31 }32 pDict =PyModule_GetDict(pModule);33 if(!pDict){34 printf("Can't find dict in py_add!\n");35 return -1;36 }37 pFunc = PyDict_GetItemString(pDict,"add");38 if(!pFunc || !PyCallable_Check(pFunc)){39 printf("Can't find function!\n");40 getchar();41 return -1;42 }43 /*

44 向Python传参数是以元组(tuple)的方式传过去的,45 因此我们实际上就是构造一个合适的Python元组就46 可以了,要用到PyTuple_New,Py_BuildValue,PyTuple_SetItem等几个函数47 */

48 pArgs = PyTuple_New(2);49 //PyObject* Py_BuildValue(char *format, ...)50 //把C++的变量转换成一个Python对象。当需要从51 //C++传递变量到Python时,就会使用这个函数。此函数52 //有点类似C的printf,但格式不同。常用的格式有53 //s 表示字符串,54 //i 表示整型变量, 如Py_BuildValue("ii",123,456)55 //f 表示浮点数,56 //O 表示一个Python对象

57 PyTuple_SetItem(pArgs,0,Py_BuildValue("i",123));58 PyTuple_SetItem(pArgs,1,Py_BuildValue("i",321));59 //调用python的add函数

60 PyObject_CallObject(pFunc,pArgs);61 //清理python对象

62 if(pName){63 Py_DECREF(pName);64 }65 if(pArgs){66 Py_DECREF(pArgs);67 }68 if(pModule){69 Py_DECREF(pModule);70 }71 //关闭python调用

72 Py_Finalize();73 return 0;74 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值