ubuntu 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;}// 声明入参,这里是jsonstringstring 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的参数需要用元组 包装, 如果是两个参数则 元组长度为2PyObject* 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
运行结果: