QT中 使用c++調用python

來源:互聯網
上載者:User

標籤:

最近在做一個項目,開發環境用的是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檔案同級目錄下即可。

然後我們再來試下:

成功了!

就到這裡了,有問題的地方歡迎指出。

QT中 使用c++調用python

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.