

下面是一个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
