> 文章列表 > ubuntu c++调用python函数并获取返回值

ubuntu c++调用python函数并获取返回值

ubuntu c++调用python函数并获取返回值

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

运行结果: