Python ctypes 模組

來源:互聯網
上載者:User

標籤:基本類型   讀寫檔案   方式   特性   跨平台   類型轉換   mss   介紹   映射   

一: 模組介紹

  模組ctypes是Python內建的用於調用動態連結程式庫函數的功能模組,一定程度上可以用於Python與其他語言的混合編程。由於編寫動態連結程式庫,使用C/C++是最常見的方式,故ctypes最常用於Python與C/C++混合編程之中。

 

二:ctypes 的原理以及優缺點

  從ctypes的文檔中可以推斷,在各個平台上均使用了對應平台動態載入動態連結程式庫的方法,並通過一套類型映射的方式將Python與二進位動態連結程式庫相串連。通過閱讀ctypes本身的代碼也可以印證這個推斷(/Modules/_ctypes/_ctypes.c和/Modules/_ctypes/callproc.c)。在Windows平台下,最終調用的是Windows API中LoadLibrary函數和GetProcAddress函數,在Linux和Mac OS X平台下,最終調用的是Posix標準中的dlopen和dlsym函數。ctypes 實現了一系列的類型轉換方法,Python的資料類型會封裝或直接推算為C類型,作為函數的調用參數;函數的傳回值也經過一系列的封裝成為Python類型。也就是說,PyObject* <-> C types的轉換是由ctypes內部完成的,這和SWIG是同一個原理。

從ctypes的實現原理不難看出:

ctypes 有以下優點:

  • Python內建,不需要單獨安裝
  • 可以直接調用二進位的動態連結程式庫
  • 在Python一側,不需要瞭解Python內部的工作方式
  • 在C/C++一側,也不需要瞭解Python內部的工作方式
  • 對基本類型的相互映射有良好的支援

ctypes 有以下缺點:

  • 平台相容性差
  • 不能夠直接調用動態連結程式庫中未經匯出的函數或變數
  • 對C++的支援差

就個人的經驗來看,ctypes 適合於“中輕量級”的Python C/C++混合編程。特別是遇到第三方庫提供動態連結程式庫和調用文檔,且沒有編譯器或編譯器並不互相相容的場合下,使用ctypes特別方便。值得注意的是,對於某種需求,在Python本身就可以實現的情況下(例如擷取系統時間、讀寫檔案等),應該優先使用Python自身的功能而不要使用作業系統提供的API介面,否則你的程式會喪失跨平台的特性。

 

三:使用舉例

linux下測試:hello word

#include<stdio.h>int main(){printf("Hello World!");return 1;}

這裡只有一個main函數,注意:gcc(Linux和Mac OS X的預設編譯器)下,所有函數預設均匯出,windows需要

接下來把它編譯為動態連結程式庫。Windows下動態連結程式庫的副檔名是dll,Linux下是so,Mac OS X下是dylib。這裡為了方便起見,一律將副檔名設定為dll。  

Windows GCC、Linux、Mac OS X下編譯命令相同:

gcc -fPIC -shared -msse4.2 hello.c -o hello.dll #或者為hello.so

 

使用python來調用:

>>> from ctypes import *
>>>mm = cdll.LoadLibrary(‘hello.dll‘)##或者為hello.so,

>>> mm.main()
hello world!1
------------------------

 

more:

http://www.cnblogs.com/ryhan/p/6056316.html

 

Python ctypes 模組

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.