c++调用python详细教程-创新互联

1. 引入python环境的include和libs

创新互联专注于凤冈企业网站建设,响应式网站,商城建设。凤冈网站建设公司,为凤冈等地区提供建站服务。全流程定制网站建设,专业设计,全程项目跟踪,创新互联专业和态度为您提供的服务
INCLUDEPATH += D:\Python\Anaconda3\include

LIBS += -LD:\Python\Anaconda3\libs -lpython39

2. 准备python脚本。注意:python脚本应当能在cmd独立运行,如果运行不了说明环境有问题,调用也会失败。python返回多个结果,采用列表。

import numpy as np
from scipy import interpolate

def fun1(a):
    x = np.array([1,2,3,4,5,6,7,8,9,10])
    y = np.array([1,4,9,16,25,36,49,64,81,100])
    z = np.array([1,3,5,7,9,11,13,15,17,19])
    f1 = interpolate.interp1d(x,y,kind='cubic')
    f2 = interpolate.interp1d(x,z,kind='cubic')
    return [f1(a),f2(a)]

#fun1(7.77)

3. 调用流程

#include#include//引入头文件

using namespace std;

int main()
{
    //设置PythonHome
    Py_SetPythonHome(L"D:/Python/Anaconda3");
    //初始化
    Py_Initialize();

    PyRun_SimpleString("import sys");
    //设置hello.py文件的路径。也可以直接将python文件放到debug目录下exe文件所在地
    PyRun_SimpleString("sys.path.append('D:/Qt/QtProject/helloworld')");

    //指针变量
    PyObject *m,*f,*args,*result;

    //获取模块,hello为python文件名
    m = PyImport_ImportModule("hello");
    if(!m) cout<<"hello failed";

    //获取函数,fun1为函数名
    f = PyObject_GetAttrString(m,"fun1");
    if(!f) cout<<"fun1() failed";

    //设置参数,最好传入元组(d),不然容易报错
    args = Py_BuildValue("(d)",7.7);

    //执行函数
    result = PyObject_CallObject(f,args);

    double ret,ret2;
    //获取单个值
//    PyArg_Parse(result,"d",&ret);

    //获取列表值,相应的python脚本应当返回列表而不是元组
    ret = PyFloat_AsDouble(PyList_GetItem(result,0));
    ret2 = PyFloat_AsDouble(PyList_GetItem(result,1));
    cout<

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


网站标题:c++调用python详细教程-创新互联
链接分享:http://scyanting.com/article/dhssge.html