C 语言调用python 脚本函数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C 语言调用python 脚本函数相关的知识,希望对你有一定的参考价值。
刚好几个月前做过,C++ 函数里面先加载python 脚本,再调用 里面的 def 函数,我把代码贴出来,你在main 函数里面,调用getDataByScript 函数,另外相同目录下放一个 fuckTest.py ,我是centos6.7
编译
g++ -o test test.cpp -lpython2.7
callPython.h
#include<Python.h>
#include<string>
using namespace std;
char* getDataByScript(const char* moduleName,int& bufferSize,int& errInfo)
{
errInfo = 0;
bufferSize = 0;
Py_Initialize();
if(!Py_IsInitialized())
{
errInfo = 1;
return NULL;
}
PyRun_SimpleString("import sys");
PyRun_SimpleString("sys.path.insert(0,‘./‘)");
//PyRun_SimpleString("print sys.path");
PyObject* pName = PyString_FromString(moduleName);
PyObject* pModule = PyImport_Import(pName);
if(!pModule)
{
printf("can‘t import error\n");
errInfo = 2;
return NULL;
}
PyObject* pDict = PyModule_GetDict(pModule);
if(!pDict)
{
errInfo = 3;
return NULL;
}
PyObject* pFunc = PyDict_GetItemString(pDict,"callFuncNoArgs");
if(!pFunc || !PyCallable_Check(pFunc))
{
errInfo = 4;
return NULL;
}
//PyObject* pArgs = PyTuple_New(2);
//PyTuple_SetItem(pArgs,0,Py_BuildValue("l",100));
//PyTuple_SetItem(pArgs,1,Py_BuildValue("l",200));
PyObject* res = PyObject_CallObject(pFunc,NULL);
if(!PyString_Check(res))
{
errInfo = 5;
return NULL;
}
else
{
bufferSize = int(PyString_Size(res));
return (char*)PyString_AsString(res);
}
}
test.cpp
#include <iostream>
#include"callPython.h"
using namespace std;
int main()
{
int size =0;
int errInfo = 0;
getDataByScript("fuckTest",size,errInfo);
return 0;
}
fuckTest.py
def callFuncNoArgs():
print "test.py func called !!!"
return "fuck"
以上是关于C 语言调用python 脚本函数的主要内容,如果未能解决你的问题,请参考以下文章