• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

QT中使用c++调用python

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

最近在做一个项目,开发环境用的是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 -1;
    }
    //导入test.py模块
    PyObject* pModule = PyImport_ImportModule("test");
    if (!pModule) {
            printf("Cant open python file!\n");
            return -1;
        }
    //获取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 -1;
    }
    //调用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文件同级目录下即可。

然后我们再来试下:

成功了!

就到这里了,有问题的地方欢迎指出。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C++线程安全的单例模式发布时间:2022-07-13
下一篇:
asp.netC#获得配置文件AppSettings的值发布时间:2022-07-13
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap