c++调用python文件的函数并获取函数的返回值
c++文件
#include <iostream>
#include <Python.h>
using namespace std;
int main()
{
cout << "Hello World!" << endl;
//初始化python环境
Py_Initialize();
if(!Py_IsInitialized()) {
cout<<"python init error..."<<endl;
return -1;
}
// 声明入参,这里是jsonstring
string inParams = "{\"text\":\"hello world\"}";
cout << inParams << endl;
//添加编译后python文件的所在路径
PyRun_SimpleString("import sys");
PyRun_SimpleString("import os");
PyRun_SimpleString("sys.path.append('./python_scripts/')");
//需要调用的python文件名
PyObject* pModule = PyImport_ImportModule("trans");
if(!pModule) {
cout<<"do not find trans.py file..."<<endl;
return -2;
}
//获取模块中的函数
PyObject* pFunc = PyObject_GetAttrString(pModule, "trans");
//传递给python的参数需要用元组 包装, 如果是两个参数则 元组长度为2
PyObject* pArgs = PyTuple_New(1);
//如果字符串中包含中文需要将字符串转换为utf-8的编码格式
PyObject* pValue = Py_BuildValue("s", inParams.c_str());
PyTuple_SetItem(pArgs, 0, pValue);
//调用python函数返回结果
PyObject* pReturn = PyObject_CallObject(pFunc, pArgs);
string returnPythonString = PyUnicode_AsUTF8(pReturn);
cout<<"python return : "<<returnPythonString<<endl;
//关闭释放python资源
Py_Finalize();
return 0;
}
python文件
# -*- coding: utf-8 -*-
import json
def trans(inParams):
data = json.loads(inParams)
outParams = {
"getText": data["text"]
}
return json.dumps(outParams,ensure_ascii=False)
编译:
g++ main.cpp -I/usr/include/python3.6m -lpython3.6m
运行结果: