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元起,快前往官网查看详情吧