Command-Line
將程序 GUI 前端和 CLI 功能分開
在 Linux 中,很多程序都有 CLI 版本和 GUI 前端。我在某處讀到這遵循 linux 哲學並且是一種很好的做法。當然,從開發人員的角度來看,將 GUI 程式碼與實際程序分開是正確的。
給定一個可以從命令行愉快地使用的程序,我想為命令行版本創建一個 GUI。我在這裡有什麼選擇?
我只能想到 GUI 開發人員會使用的 2 個。
- 使用配置的參數呼叫程序,如下所示:
系統(“一些程序–paramter1 -p2 -p3”)
- 讓 CLI 版本能夠使用套接字(unix,inet,…)在伺服器模式下執行,並使用這些套接字與“伺服器”通信
在我看來,最乾淨的解決方案將是第二個,但如果不更改 CLI 版本,這並不總是可行的。
實際的問題是分別建構 cli 版本和 GUI 版本的正確方法是什麼?
另一種方法是將您的功能編寫為庫。然後你有一個使用庫的 GUI;和一個也使用該庫的 CLI。根據您的任務的複雜性,這可能是最佳解決方案,因為這兩個程序可以獨立工作,而無需任何類型的程序間通信。
如果程序的執行是相對無狀態的,或者它不是互動式的,或者它通常只是執行到完成,那麼第一個選項是最簡單和最合適的。
如果程序是有狀態的或長期執行的,那麼第二個選項是最合適的,雖然更複雜。
想想 FTP:使用
curl
或wget
編寫腳本下載與使用expect
腳本編寫互動式 ftp 會話,可能並非在每種情況下都有正確的答案。有趣的研究案例包括:
nmap
可以在 XML 中提供所有復雜有用的輸出,並在掃描期間提供回饋,一旦開始,您只需坐下來等待gpg
由於 CLI 與 GUI 電子郵件客戶端的集成歷史悠久,因此它使用文件描述符進行輸入和輸出xmlclitools
具有有趣的雙模式操作,獨立和客戶端/伺服器