我有一個用C++編寫的遺留(但仍然是內部維護的)應用程序,它處理一些硬件,與數據庫交互,通過串行線路或套接字接收命令...總之,它不重要工作量。使用python擴展C++應用程序
此應用程序在Linux(ARM/Buildroot)下運行。
現在需要修改添加RESTful API的控件界面。
我正在探索通過Python擴展來做到這一點的可能性。
注意我是一名C++/java程序員,我不擅長Python,但我知道基礎知識。
總體思路是:
- 啓動Python解釋器作爲C++應用程序的線程。
- 使用Flask/jinja2(或者簡單的Bottle)來處理傳入的RESTful請求。
- 向Python展示一些(可能只是一個)C++類。
- 從Python調用相應的C++方法來執行所需的操作。
我學的官方文檔(主要是關於純C)和幾個備選方案,其中包括:
- Boost.Python的(可能是太重了,我們有限的硬件)
- pybind11(似乎只關心在擴展Python,而不是嵌入它)。
- http://www.codeproject.com/Articles/11805/Embedding-Python-in-C-C-Part-I(只處理嵌入,不允許Python訪問C++類)。
問題是:
- 這是否任何意義?
- 什麼是實現這一目標的最不具侵入性的方式(如果有的話)?
- 哪些lib/framework被建議使用?
- 是否有一些教程項目沿着這些線?
我知道這個問題相當廣泛,但我希望只要第一條評論指向正確的方向就可以縮小它。
真的需要在應用程序中嵌入REST API嗎?如果你已經有了基於套接字的控制接口,爲什麼不讓REST API使用它(並且作爲一個獨立的應用程序)? –
@DanMašek:當前的控制界面非常有限,不包括數據庫設置,必須手動完成。報告功能也相當有限。我打算直接在Python中實現一些數據庫訪問設施,併爲功能查詢提供更好的響應。基本上我們正在探索進一步增強當前應用程序的可能性,以保持現有的(或多或少)並增加主要在Python中的新功能。進一步的開發將是將現有的功能從C++移植到Python並放棄傳統接口(遠景!)。 – ZioByte