那麼給定一個C代碼,是否有一種方法可以使用其他語言(如Python)來執行C代碼。我想說的是,有很多模塊是使用語言構建的,但也提供通過不同語言訪問,有沒有辦法做到這一點?如何開發一個C代碼的python包裝?
0
A
回答
1
很多方法。一般來說,這通常被稱爲Foreign Function Interface。維基百科頁面稱,下列關於Python:
* The major dynamic languages, such as Python, Perl, Tcl, and Ruby,
所有提供方便的用C/C++(或任何其他 語言服從C/C++調用 約定)的本機代碼 。 ø的Python另外提供的ctypes的模塊2,其 可以從共享庫 加載的C函數/上即時DLL和 翻譯簡單數據類型 Python和C 語義之間自動。例如:
import ctypes libc = ctypes.CDLL('/lib/libc.so.6') # under Linux/Unix
t = libc.time(None) # equivalent C code: t = time(NULL)
print t
支持許多語言中流行的選擇是SWIG
2
當然,它在Python世界中被稱爲「擴展」。該official documentation is here。短摘錄:
本文檔描述瞭如何寫在C或C++ 模塊來擴展 Python解釋與新的模塊。這些模塊可以定義新功能 ,但也可以定義新的對象類型和它們的方法 。該文檔還描述瞭如何將Python解釋器嵌入 另一個應用程序中,以用作 擴展語言。最後,它顯示 如何編譯和鏈接擴展 模塊,以便它們可以動態地(在運行時)加載 到 解釋器,如果底層 操作系統支持此功能。
對於Python來說更簡單的方法是使用標準包在DLL中運行代碼。
相關問題
- 1. 包裝用於Python的C++ OpenCV代碼
- 2. 如何爲python包裝一個C++庫?
- 3. 如何創建一個圍繞Perl代碼的Python包裝?
- 4. Python包裝來運行C#代碼
- 5. 用Python包裝C++代碼(手動)
- 6. 如何用Boost :: Python包裝C++ OpenCV代碼?
- 7. 將一段C++代碼包裝到Python中
- 8. 如何使用C#編譯C++代碼。需要開發一個C++ IDE
- 9. Python包括C代碼
- 10. 如何開始在另一個包裝器上編寫python包裝?
- 11. 從github安裝 - 開發一個包
- 12. 我如何開發一個可測試的TcpClient/TcpListener包裝器
- 13. 如何開始做一個包裝在C#中的WebKit
- 14. 如何調試C++代碼的C++/CLI包裝
- 15. 如何在C++異常處理中包裝我的C代碼?
- 16. 創建一個簡單的C#包裝清理代碼
- 17. 從Python的使用C:如何創建一個ctypes包裝
- 18. 一個包含C代碼和彙編代碼的C項目
- 19. 開放源代碼的ODBC連接包裝MS SQL的C++
- 20. 用Objective-C++包裝C++代碼
- 21. 從C#代碼觸發PS1文件。 C#代碼必須包裝在exe
- 22. 如何在單個Eclipse項目中開發GWT代碼(Java)和Appengine代碼(Python)?
- 23. c#包裝本地C++代碼,包裝一個參數,這是一個指針數組
- 24. 安裝python開發包沒有yum
- 25. 代碼 - 包裝代碼
- 26. 如何轉換這個Python代碼C++
- 27. 將Python函數傳遞給SWIG包裝的C++代碼
- 28. 如何在C++代碼中包裝C二維數組(Foo **)?
- 29. 如何在C#代碼運行另一個安裝的程序
- 30. 如何正確包裝一個C庫與Python CFFI
我想痛飲將是一個直接的方法。但是當我使用c/C++代碼作爲python模塊時,我會無意中丟失數據,例如,當我使用STL並嘗試將值傳遞給python數據類型時。 – Rahul 2010-11-03 13:16:42
@Rahul:你問過C嗎?那麼,STL如何處理它呢?無論如何,請閱讀SWIG對STL的支持:http://www.swig.org/Doc1.3/Library.html#Library_stl_cpp_library – 2010-11-03 13:49:03