Command-Line

將程序 GUI 前端和 CLI 功能分開

  • February 19, 2013

在 Linux 中,很多程序都有 CLI 版本和 GUI 前端。我在某處讀到這遵循 linux 哲學並且是一種很好的做法。當然,從開發人員的角度來看,將 GUI 程式碼與實際程序分開是正確的。

給定一個可以從命令行愉快地使用的程序,我想為命令行版本創建一個 GUI。我在這裡有什麼選擇?

我只能想到 GUI 開發人員會使用的 2 個。

  • 使用配置的參數呼叫程序,如下所示:

系統(“一些程序–paramter1 -p2 -p3”)

  • 讓 CLI 版本能夠使用套接字(unix,inet,…)在伺服器模式下執行,並使用這些套接字與“伺服器”通信

在我看來,最乾淨的解決方案將是第二個,但如果不更改 CLI 版本,這並不總是可行的。

實際的問題是分別建構 cli 版本和 GUI 版本的正確方法是什麼?

另一種方法是將您的功能編寫為庫。然後你有一個使用庫的 GUI;和一個也使用該庫的 CLI。根據您的任務的複雜性,這可能是最佳解決方案,因為這兩個程序可以獨立工作,而無需任何類型的程序間通信。

如果程序的執行是相對無狀態的,或者它不是互動式的,或者它通常只是執行到完成,那麼第一個選項是最簡單和最合適的。

如果程序是有狀態的或長期執行的,那麼第二個選項是最合適的,雖然更複雜。

想想 FTP:使用curlwget編寫腳本下載與使用expect腳本編寫互動式 ftp 會話,可能並非在每種情況下都有正確的答案。

有趣的研究案例包括:

  • nmap可以在 XML 中提供所有復雜有用的輸出,並在掃描期間提供回饋,一旦開始,您只需坐下來等待
  • gpg由於 CLI 與 GUI 電子郵件客戶端的集成歷史悠久,因此它使用文件描述符進行輸入和輸出
  • xmlclitools具有有趣的雙模式操作,獨立和客戶端/伺服器

引用自:https://unix.stackexchange.com/questions/65244