C++调⽤python并获取其返回值
C++调⽤python并获取其返回值
先上实例代码:
C++代码:
//初始化py环境
// Py_Initialize();
PyRun_SimpleString("import sys");
PyRun_SimpleString("sys.path.append('./')");
if(!Py_IsInitialized())
{
printf("cant initialize\n");
return;
}
//导⼊PY⽂件
PyObject* pModule = PyImport_ImportModule("nyh");
if (!pModule)
{
printf("cant open py file");
return;
}
else
printf("open py file sucess\n");
/
/获取PY⽂件中的函数
PyObject* pFunhello = PyObject_GetAttrString(pModule,"nyhtest");
if(!pFunhello)
{
cout<<"Get function failed"<<endl;
}
PyObject* pArg = NULL;
char* ch;
QByteArray ba = Latin1();
ch = ba.data(); //Qstring转成char类型
pArg = Py_BuildValue("(s)",ch); //⼀个字符串参数
PyObject* pyValue = PyObject_CallObject(pFunhello,pArg);
char *imagePath,*IO_door;
PyArg_ParseTuple(pyValue,"s|s",&imagePath,&IO_door);//只返回⼀个数时会显⽰乱码,所以加了没有含义的IO_door if(pyValue)
{
printf("return sucess\n");
//ui->textEdit_5->setText(QString::fromUtf8(imagePath));
//printf(string(imagePath));
QString imgpth=QString::fromUtf8(imagePath);
QImage img;
img.load(imgpth);
ui->label->setPixmap(QPixmap::fromImage(img));
}
printf("Finished\n");
python代码:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#__all__=[ ]
def scenelocation(imagePath):
xx='none'
return 'cam.jpg',xx
注:python中的cam.jpg为同⽬录下的图⽚⽂件名,C++中的filename为前⾯编写的选择的图⽚⽂件名。
⾸先初始化python环境:
Py_Initialize();
PyRun_SimpleString(“import sys”);
PyRun_SimpleString(“sys.path.append(’./’)”);
这⾥注释掉Py_Initialize();是因为主函数⾥已经初始化过了。
然后导⼊python⽂件模块:
PyObject* pModule = PyImport_ImportModule(“nyh”); //nyh为py⽂件名,不需要加.py
然后获取py⽂件中的函数:
PyObject* pFunhello = PyObject_GetAttrString(pModule,“nyhtest”); //nyhtest为函数名
python怎么读取py文件然后把图⽚路径作为参数传⼊给py⽂件函数模块:
PyObject* pArg = NULL;
char* ch;
QByteArray ba = Latin1();
ch = ba.data(); //Qstring转成char类型
pArg = Py_BuildValue("(s)",ch); //⼀个字符串参数
获取py函数的返回值:
PyObject* pyValue = PyObject_CallObject(pFunhello,pArg);
读取返回值:
PyObject* pyValue = PyObject_CallObject(pFunhello,pArg);
char *imagePath,*IO_door;
PyArg_ParseTuple(pyValue,“s|s”,&imagePath,&IO_door);//只返回⼀个会显⽰乱码
最后再将获取到的返回值,修改为Qt可以调⽤的图⽚路径格式,并显⽰在label⾥即可。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论