久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

如何嵌入Python代碼到C程序

 youxd 2016-12-27

Python部落(python.freelycode.com)組織翻譯,,歡迎轉(zhuǎn)發(fā),。

Python是最流行的編程語(yǔ)言之一,這歸功于其簡(jiǎn)單的語(yǔ)法,,易學(xué)和跨平臺(tái)支持,。此外還由于,很多高質(zhì)量的Python庫(kù)和模塊可任意使用,,僅僅幾行代碼就允許你完成繁重的工作,。這使得Python成為開(kāi)發(fā)原型最有效的方法之一。然而,,Python沒(méi)有C語(yǔ)言快,,而且很多性能很重要的軟件產(chǎn)品如Linux操作系統(tǒng),,web服務(wù)器和數(shù)據(jù)庫(kù)都是用C編寫的。如果你用C開(kāi)發(fā)一個(gè)程序,,但是它的某些部分需要用Python編寫,,你可以編寫一個(gè)Python模塊并且使用Python/C API嵌入Python模塊到C程序中。

在本教程中,,我們研究如何使用Python/C API在C中嵌入Python代碼,。本教程以一個(gè)從C代碼調(diào)用Python的完整示例結(jié)尾。

步驟1:安裝Python開(kāi)發(fā)包

由于需要訪問(wèn)Python/C API,,首先安裝Python開(kāi)發(fā)包,。

在Debian,Ubuntu或Linux Mint中:

在CentOS,,F(xiàn)edora或RHEL中:

安裝成功后,,Python頭文件在/usr/include/python2.7。根據(jù)Linux發(fā)行版的不同,,確切的路徑可能是不相同的。例如,,CentOS 6中是/usr/include/python2.6,。

步驟2:初始化解釋器并設(shè)置路徑

C中嵌入Python的第一步是初始化Python解釋器,這可以用以下C函數(shù)完成,。

初始化解釋器后,,需要設(shè)置你的C程序中要導(dǎo)入的Python模塊的路徑。例如,,比如你的Python模塊位于/usr/local/modules,。然后使用以下C函數(shù)調(diào)用來(lái)設(shè)置路徑。

步驟3:數(shù)據(jù)轉(zhuǎn)換

C中嵌入Python最重要的方面之一是數(shù)據(jù)轉(zhuǎn)換,。從C中傳遞數(shù)據(jù)到Python函數(shù),,需要首先將數(shù)據(jù)從C數(shù)據(jù)類型轉(zhuǎn)換到Python數(shù)據(jù)類型。Python/C API提供各種函數(shù)來(lái)實(shí)現(xiàn)這,。例如,,轉(zhuǎn)換C字符串到Python字符串,使用PyString_FromString函數(shù),。

另外一個(gè)類似函數(shù)PyInt_FromLong,,將C中l(wèi)ong數(shù)據(jù)類型轉(zhuǎn)換為Python int。每個(gè)Python/C API函數(shù)返回一個(gè)PyObject類型的引用,。

步驟4:定義一個(gè)Python模塊

當(dāng)你想嵌入Python代碼到另一種語(yǔ)言如C,,該代碼需要被寫成Python模塊,然后用另一種語(yǔ)言“導(dǎo)入”,。所以讓我們來(lái)看看如何在C中導(dǎo)入Python模塊,。

為了進(jìn)行說(shuō)明,,我們實(shí)現(xiàn)一個(gè)簡(jiǎn)單的Python模塊例子如下:

以上的Python函數(shù)有一個(gè)字符串作為參數(shù)并返回兩個(gè)重復(fù)的字符串。例如,,如果輸入字符串是“cyberpersons”,,該函數(shù)返回'cyberpersonscyberpersons'。此模塊文件命名為“printData.py”并將它放在前面聲明的Python模塊目錄中(/usr/local/modules),。

步驟5:加載一個(gè)Python模塊

現(xiàn)在你已經(jīng)定義了Python模塊,,是時(shí)候在C程序中加載它了。導(dǎo)入模塊的C代碼看起來(lái)像這樣:

步驟6:構(gòu)建函數(shù)的參數(shù)

當(dāng)加載一個(gè)模塊時(shí),,可以調(diào)用模塊中定義的Python函數(shù),。通常,我們需要傳遞一個(gè)或多個(gè)參數(shù)到一個(gè)Python函數(shù),。我們必須構(gòu)建一個(gè)Python元組對(duì)象,,它包括Python函數(shù)中的參數(shù)。

在我們的例子中,,printData函數(shù)定義帶一個(gè)參數(shù)的模塊,。因此,我們構(gòu)建一個(gè)大小是一的Python元組對(duì)象如下,。我們可以使用PyTuple_SetItem設(shè)置元組對(duì)象的每個(gè)項(xiàng),。

我們已經(jīng)成功構(gòu)建一個(gè)參數(shù)傳遞到函數(shù)調(diào)用,是時(shí)候從C程序調(diào)用python函數(shù)了,。

步驟7:調(diào)用Python函數(shù)

一旦成功創(chuàng)建Python元組對(duì)象作為函數(shù)參數(shù),,我們可以調(diào)用一個(gè)帶參數(shù)的Python函數(shù)。為此,,通過(guò)使用PyObject_GetAttrString首先獲得模塊中定義的函數(shù)的引用,,然后使用PyObject_CallObject調(diào)用該函數(shù)。例如:

步驟8:錯(cuò)誤檢查

避免運(yùn)行時(shí)錯(cuò)誤的常見(jiàn)方法是檢查函數(shù)的返回值并根據(jù)返回值采取適當(dāng)?shù)男袆?dòng),。類似于C程序中的全局變量errno,,Python/C API提供一個(gè)全局指示符,它報(bào)告最后發(fā)生的錯(cuò)誤,。當(dāng)Python/C API函數(shù)失敗,,全局指示符設(shè)置為指示錯(cuò)誤,并且PyErr_Print可以用于顯示相應(yīng)的人類可讀的trackback,。例如:

如何嵌入Python代碼到C程序

在你的應(yīng)用程序中,,你可以輕松地將各種錯(cuò)誤檢查。

這里是完整的C程序,,它如本教程描述的嵌入Python代碼,。

如何嵌入Python代碼到C程序

如何嵌入Python代碼到C程序

步驟9:編譯和執(zhí)行

保存以上代碼到finalCode.c,并且鏈接Python庫(kù)(-lpython2.7)編譯該代碼。根據(jù)發(fā)行版的不同,,可能使用不同的版本(例如,,-lpython2.6)。

現(xiàn)在使用三個(gè)參數(shù)運(yùn)行編譯的可執(zhí)行文件:

本例中的三個(gè)參數(shù)是模塊名,、模塊中函數(shù)名,、傳遞到Python函數(shù)的字符串參數(shù)。

輸出會(huì)是這樣的:

希望這可以幫助你,。

英文原文:http:///embed-python-code-in-c.html
譯者:wangyc

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多