C++工程调用python代码(传参数)

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;
}

运行效果如下:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值