下面是一个C调用Python脚本的例子:
#include <Python.h> int main(int argc, char *argv[]) { PyObject *pName, *pModule, *pDict, *pFunc, *pArg, *pRetVal; Py_Initialize(); if ( !Py_IsInitialized()) { return -1; } /* PyRun_SimpleString("from time import time,ctime\n" "print 'Today is',ctime(time())\n"); */ if(!(pModule = PyImport_ImportModule("test"))) { printf("2\n"); return -2; } if(!(pFunc = PyObject_GetAttrString(pModule,"add"))) { printf("3\n"); return -3; } pArg = Py_BuildValue("(i,i,{s:i,s:i})",33,44,"aa",10,"bb",20); //函数参数为两个整型,一个字典型,字典型有两个值。 pRetVal = PyObject_CallObject(pFunc,pArg); /* printf("%d\n",PyInt_AsLong(pRetVal));*/ Py_Finalize(); return 0; }
此程序在编译时,首先报错“3”。test.py中确有add函数。原因何在?是因为python本身有test模块,如此形式的import会把默认模块调入,当然找不到add函数。
那么改名test1.py呢,这次错误报“2”。原因是找不到test1.py,即使把test1.py放在此C程序的同一目录下也不行。需要在import前加入系统路径:
PyRun_SimpleString("import sys"); PyRun_SimpleString("sys.path.append('//home//sdfdf//src//busilibs')");
将当前目录加入系统路径后,就能找到test1.py了,运行正常。
原创文章,作者:苏葳,如需转载,请注明出处:https://www.swmemo.com/399.html