C++项目里面调用python代码去处理数据转换:
使用场景:
1-python比较多科学计算数学库,能够起到快速验证算法的作用
2-C++高效率,落地工业项目场景,但需要借助python的某些库做数学处理
demo 如下:
#include <Python.h>
#include <iostream>
int main() {
Py_Initialize(); //初始化python解释器
PyObject* pName = PyUnicode_DecodeFSDefault("trace3d");
PyObject* pModule = PyImport_Import(pName);
Py_DECREF(pName);
if (pModule != nullptr) {
PyObject* pFunc = PyObject_GetAttrString(pModule, "totalProcess");
if (pFunc && PyCallable_Check(pFunc)) {
// 构造参数元组
PyObject* pArgs = PyTuple_New(4); // 4个参数
PyTuple_SetItem(pArgs, 0, PyUnicode_FromString("path16.ply"));
PyTuple_SetItem(pArgs, 1, PyUnicode_FromString("T_cam_base.npy"));
PyTuple_SetItem(pArgs, 2, PyUnicode_FromString("dh_opt.txt"));
PyTuple_SetItem(pArgs, 3, PyUnicode_FromString("joint_trajectory.csv"));
//PyTuple_SetItem(pArgs, 0, PyLong_FromLong(5)); // 第1个参数b=5
//PyTuple_SetItem(pArgs, 1, PyUnicode_FromString("hello"));
//PyTuple_SetItem(pArgs, 2, PyFloat_FromDouble(3.14));
PyObject* pValue = PyObject_CallObject(pFunc, pArgs);
Py_DECREF(pArgs);
if (pValue != nullptr) {
long result = PyLong_AsLong(pValue);
std::cout << "Python返回: " << result << std::endl;
Py_DECREF(pValue);
} else {
PyErr_Print();
}
Py_XDECREF(pFunc);
} else {
PyErr_Print();
}
Py_DECREF(pModule);
} else {
PyErr_Print();
}
std::getchar();
Py_Finalize();
return 0;
}
运行效果如下: