QT中 使用c++调用python
最近在做一个项目,开发环境用的是QT c++。项目中使用amazon云服务,调研发现有一个Amazon云的python接口。就有了标题中的问题,需要用C++来调用python脚本。
下面是一个c++调用python的小例子。我先贴出代码,然后在详细介绍。
# -*- coding: cp936 -*-
#定义hello函数,这个函数的功能是输出“hello world!”
def hello():
print("hello world!")
上面就是我们一会要用C++调用python脚本,你没看错,只有两行,是不是很简单,这也是我们为什么要调用Amazon云的python接口的原因。
#include <QCoreApplication>
#include <Python.h>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv); //初始化python模块
Py_Initialize();
if ( !Py_IsInitialized() )
{
return -;
}
//导入test.py模块
PyObject* pModule = PyImport_ImportModule("test");
if (!pModule) {
printf("Cant open python file!\n");
return -;
}
//获取test模块中的hello函数
PyObject* pFunhello= PyObject_GetAttrString(pModule,"hello");
//注释掉的这部分是另一种获得test模块中的hello函数的方法
// PyObject* pDict = PyModule_GetDict(pModule);
// if (!pDict) {
// printf("Cant find dictionary.\n");
// return -1;
// }
// PyObject* pFunhello = PyDict_GetItemString(pDict, "hello"); if(!pFunhello){
cout<<"Get function hello failed"<<endl;
return -;
}
//调用hello函数
PyObject_CallFunction(pFunhello,NULL);
//结束,释放python
Py_Finalize();
return a.exec(); }
上面是C++调用python的代码。要想具体了解这些Py**函数,可以去看看python手册或者其他网络资源,我看的是这个http://segmentfault.com/a/1190000000531613
这个测试工程的结构如下图所示:
在运行之前需要进行配置,注意到main.cpp包含了一个Python.h的头文件,这是调用python脚本必须的,同时我们还要配置这个工程的.pro文件,将python的include和lib包含进来。
配置如下所示:
这样就可以调用python代码了吗?
来看看我们的运行结果:
可以看到,没有打开python文件,为什么呢?
这是因为生成的exe文件和tests.py文件不在同一个文件夹里,只要手动将test.py拷贝到exe文件同级目录下即可。
然后我们再来试下:
成功了!
就到这里了,有问题的地方欢迎指出。
QT中 使用c++调用python的更多相关文章
- 在go中通过cmd调用python命令行参数量级过大问题解决
问题描述如下: 在go中使用cmd调用python命令行 cmd := exec.Command("python", "dimine/Kriging/matrix.py& ...
- 在QT C++中调用 Python并将软件打包发布(裸机可运行)
为了提高工作效率,需要一个可以自动生成多份相关联的word文档免去繁琐复制粘贴工作的软件.最后选定使用QT C++做界面和主要逻辑程序设计,对word的操作使用python写好对应的函数,然后在QT中 ...
- 在Java中调用Python
写在前面 在微服务架构大行其道的今天,对于将程序进行嵌套调用的做法其实并不可取,甚至显得有些愚蠢.当然,之所以要面对这个问题,或许是因为一些历史原因,或者仅仅是为了简单.恰好我在项目中就遇到了这个问题 ...
- Java调用Python脚本并获取返回值
在Java程序中有时需要调用Python的程序,这时可以使用一般的PyFunction来调用python的函数并获得返回值,但是采用这种方法有可能出现一些莫名其妙的错误,比如ImportError.在 ...
- 中标麒麟(linux)下Qt调用python
转自:https://blog.csdn.net/lwlgzy/article/details/83857297 http://www.cnblogs.com/jiaping/p/6321859.ht ...
- Win10 + CLion + 树莓派 + QT 远程开发调用Python
原则:能在一个机器上开发的就不在两台机器上!! 首先需要配置远程QT开发环境 配置Cmake cmake_minimum_required(VERSION 3.14) project(qt_test) ...
- PyQt(Python+Qt)学习随笔:快速理解Qt 中Action是什么
一.引言 Qt中Action这个词接触很久了,一直以来没去学习,今天终于准备学习了,查了些资料,初步总结为: Action为界面操作的抽象,应用程序可以通过菜单,工具栏按钮以及键盘快捷键来调用通用的命 ...
- C#中调用python方法
最近因为项目设计,有部分使用Python脚本,因此代码中需要调用python方法. 1.首先,在c#中调用python必须安装IronPython,在 http://ironpython.codepl ...
- C++中调用Python脚本
C++中调用Python脚本的意义就不讲了,至少你可以把它当成文本形式的动态链接库, 需要的时候还可以改一改,只要不改变接口, C++的程序一旦编译好了,再改就没那么方便了 先看Python的代码 代 ...
随机推荐
- Spark分析之BlockManager
BlockManager中存储block的流程: doPut()方法 入参:blockId, data, level, tellMaster 1)为block创建BlockInfo并加锁使其不能被 ...
- css3选择符
常用的选择符 1.元素选择符 2.id选择符 3.class选择符 4.通配符 5.群组选择符 6.包含选择符 7.伪类选择符(伪类选择符CSS中已经定义好的选择器,不能随便取名) 8.伪对象选择符( ...
- 高斯混合模型(理论+opencv实现)
查资料的时候看了一个不文明的事情,转载别人的东西而不标注出处,结果原创无人知晓,转载很多人评论~~标注了转载而不说出处这样的人有点可耻! 写在前面: Gaussian Mixture Model (G ...
- JavaScript中判断函数、变量是否存在
转载:http://www.jb51.net/article/67551.htm 一.是否存在指定函数 function isExitsFunction(funcName) { try { if (t ...
- tornado-简单的服务器非阻塞
1.服务器 非阻塞 import tornado.ioloop import tornado.web import tornado.httpserver # 非阻塞 import tornado.op ...
- 57. 激活office时出下以下问题的解决方案
我们拿出一段来分析一下(我所知道的不多)SKU ID:1b686580-9fb1-4b88-bfba-eae7c0da31adLICENSE NAME: Office 15, OfficeProP ...
- HTML5 浏览器接收的常用 content-type
<1> 常见的设置方法 response.setHeader("content-type", 'text/html'); <2> 浏览器接收的常用 cont ...
- Mysql canal 监控数据变化
https://www.jianshu.com/p/6299048fad66 阿里巴巴github地址 https://github.com/alibaba/canal/wiki/QuickStart
- 前端-javascript-ECMAScript5.0
-前端常用开发工具:sublime.visual Studio Code.HBuilder.Webstorm. 使用的PCharm跟WebStorm是JetBrains公司推出的编辑工具,开发阶段建议 ...
- 前端-CSS-11-Z-index
---- z-index 这个东西非常简单,它有四大特性,每个特性你记住了,页面布局就不会出现找不到盒子的情况. z-index 值表示谁压着谁,数值大的压盖住数值小的, 只有定位了的元素,才能有z- ...