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;}elseprintf("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 = filename.toLatin1();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_doorif(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为函数名

然后把图片路径作为参数传入给py文件函数模块:
PyObject* pArg = NULL;
char* ch;
QByteArray ba = filename.toLatin1();
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里即可。

C++调用python并获取其返回值相关推荐

  1. js函数嵌套调用,无法获取函数返回值

    正常情况: function a() {return true; } function b() {var ret = a();alert(ret); } 异常情况: function a() {$.a ...

  2. shell调用函数并获取函数返回值

    函数 func1() {local tmp=1000echo $tmpreturn $? }调用函数 mySize=`func1` echo $mySize

  3. linux获取命令的返回值,Shell $?:获取函数返回值或者上一个命令的退出状态

    $?是一个特殊变量,用来获取上一个命令的退出状态,或者上一个函数的返回值. 所谓退出状态,就是上一个命令执行后的返回结果.退出状态是一个数字,一般情况下,大部分命令执行成功会返回0,失败返回1,这和C ...

  4. linux里返回状态命令行,Shell $?获取函数返回值或者上一个命令的退出状态

    $? 是一个特殊变量,用来获取上一个命令的退出状态,或者上一个函数的返回值. 所谓退出状态,就是上一个命令执行后的返回结果.退出状态是一个数字,一般情况下,大部分命令执行成功会返回 0,失败返回 1, ...

  5. Python 获取线程返回值获取

    Python 获取线程返回值获取 思路 重写run方法,使用线程的get_result()方法获取返回结果 '''示例: 多线程访问百度,统计平均响应时间和错误率''' class MyThread( ...

  6. 站长在线Python精讲:Python中函数的返回值

    欢迎你来到站长在线的站长学堂学习Python知识,本文学习的是<Python中函数的返回值>.本文的主要内容有:函数的返回值的含义.函数设置返回值的作用.return语句位置与多条 ret ...

  7. C#获取存储过程返回值和输出参数值的方法

    //转自网络,先留个底 1.获取Return返回值 //存储过程 //Create PROCEDURE MYSQL // @a int, // @b int //AS // return @a + @ ...

  8. keil5函数 默认返回值_python实用技巧——获取部分返回值的4种方式

    喜欢编程,热爱分享,希望能结交更多志同道合的朋友,一起在学习Python的道路上走得更远! python的函数支持返回多个值.返回多个值时,默认以tuple的方式返回. 例如,下面两个函数的定义是完全 ...

  9. 【Kotlin 协程】Flow 异步流 ② ( 使用 Flow 异步流持续获取不同返回值 | Flow 异步流获取返回值方式与其它方式对比 | 在 Android 中使用 Flow 异步流下载文件 )

    文章目录 一.使用 Flow 异步流持续获取不同返回值 二.Flow 异步流获取返回值方式与其它方式对比 三.在 Android 中 使用 Flow 异步流下载文件 一.使用 Flow 异步流持续获取 ...

最新文章

  1. hibernate笔记(三) Hibernate标识符属性(主键)生成策略全析
  2. swiper轮播后hover无效问题解决案例
  3. reentrantlock非公平锁不会随机挂起线程?_【原创】Java并发编程系列16 | 公平锁与非公平锁...
  4. excel android 公式,两个超实用的Excel万能公式,瞬间提升你10倍工作效率!
  5. c语言中创建一个整数数组_VBA中动态数组的创建及利用方法
  6. 定义空列表元素类型_【Python+Excel】做数据分析5--列表和元组读取和常用查询
  7. s2结业项目营业网点查询_论文发表完成科研项目的材料
  8. UVC系列3-研究UVC控制协议
  9. ffmpeg常用操作 - 录屏 - 转码
  10. 吃货必看!全新技术告诉我们未来吃什么
  11. 使用LSTM模型进行产品销售额的预测产品订单效益最大化
  12. 百度oCPC一键联调激活教程?api怎么对接?
  13. 进阶项目(9)IIC通信协议程序设计讲解
  14. DSP 中的基础算法和模型的详细解析
  15. 为什么选择MVVM而不是MVP - Android体系结构
  16. PS2019零基础教程分享给大家
  17. linux下dvwa安装教程,Kali linux2.0系统安装DVWA渗透测试平台 焕焕
  18. 「工具推荐」2019最实用的10大免费工具,你值得拥有
  19. 【杂货铺】金融机构分类
  20. 解决引用openssl静态库libcrypto.a和libssl.a出现undefined reference to错误的问题

热门文章

  1. 子墨对酒《三国杀》里论模式(一)工厂模式
  2. 程序多开限制———源码
  3. vue调用阿里云无痕验证
  4. 负载均衡中SNA的ip-can(iscs使用示例i)
  5. python爬取大量百度图片
  6. python listbox控件_Python GUI编程(Tkinter)10、Listbox控件
  7. RS232/RS485/CAN总线
  8. 查询oracle授权信息,oracle授权查询
  9. POJ - 3984+POJ - 3414(BFS+路径记录)
  10. 如何用机器人监听老板微信?