2012-04-20 21 views
0

我正在編寫一個應該能夠在Linux,Mac OS X,Windows和BSD上運行的應用程序(不一定是單個可執行文件,因此它不必是Java),並且可以使用簡單的插件進行擴展。用Python插件擴展性編寫跨平臺應用程序的最簡單方法是什麼?

我想要我的插件被實現的方式是作爲一個簡單的Python程序,它必須實現一個特定的功能,並簡單地返回一個字典到主程序。

插件安裝應該只是將插件腳本文件複製到相對於主可執行文件的./plugins目錄中。

主程序應該是一個獨立的可執行程序,在所有上述平臺中都有共享代碼,但是平臺特定的前端(所以Linux和BSD版本只是CLI工具,Windows版本有C++和MFC前端,而Mac OS X版本將有一個Objecive-C和Cocoa前端)。

所以我想這真是兩個問題:

  1. 什麼之間多前從結束共享通用控制器代碼最簡單的方法:

    一個。 Mac上的Objective-C?

    b。 Windows上的C++?

    ℃。來自Linux/BSD的C/Python?

  2. 從我的通用控制器實現插件來執行自定義插件最簡單的方法是什麼?

回答

2
  1. 我與fontanini這裏;爲控制器邏輯使用共享庫(DLL)。因此,最好使用C/C++,並注意RTTI(dynamic_cast <>和異常處理所需的),這可能不適用於跨越DLL邊界(例如,捕獲從另一個DLL中拋出的異常時可能會遇到問題)。

    尋找像Qt這樣的良好的跨平臺庫,它提供了許多功能(例如文件系統,進程,網絡 - 不僅僅是GUI,您希望單獨開發GUI)以平臺不可知的方式。

  2. Python/C API是爲Python提供C/C++功能的基礎(反之亦然),擴展模塊和爲嵌入式Python解釋器提供自己功能的程序之間只有很小的差異。

    但是,您可能希望使用包裝生成器(所有這些都基於Python API,但需要的代碼少於直接使用它的代碼),這可以讓您的生活更輕鬆。實例是:

    • boost::python(這是非常方便的和強大的,但是有一個難以理解的鐵桿-C++實現;-),並且導致更大的目標代碼由於過度模板使用),可能使用pyplusplus來生成升壓:: python封裝代碼直接從您的頭文件(不犧牲調整結果的可能性,例如排除或修改功能簽名)
    • SIP(特別是與它開發的[Py] Qt相結合)
    • Swig(這適用於多種腳本語言,但會導致API鏡像被封裝的C API而不是「pythonic」)
    • PyBindGen它基於與pyplusplus相同的GCCXML後端,但直接生成純Python/C API代碼,從而導致更精簡的綁定(但可能無法搜索所有代碼的盒子)
0
  1. 共享應用程序的跨平臺的Python的成分很可能會實現它作爲一個命令行程序,然後使用相關係統中的每個調用調用它的簡單方式的前端。這不是最穩健的方式,但它可能就足夠了。

  2. 如果你想插件只是一個包含Python代碼的文件,我會建議他們至少符合一個約定,例如,通過擴展一個類,然後讓你的代碼使用「import plugin_name」將它們加載到Python運行時。這比將插件作爲單獨的程序存在會更好,因爲您可以以Python類型訪問輸出,而不需要從標準輸入解析文本。

相關問題