對於需要許多參數的實用程序,建議的介面是什麼?

對於需要許多參數的實用程序,建議的介面是什麼?

我正在建立一個命令列實用程序,需要六個資訊才能正常工作。它看起來像這樣:

fm-git filename repository path comment username password

然而,在任何單獨的系統上,username並且password將是恆定的。

執行該實用程式時,我發現很難建置。例如,以下是對該實用程式的一次測試呼叫(為了便於閱讀,分為多行):

/Users/chuck/Projects/fm-git/fm-git.py chiv-lib
/Users/chuck/Projects/chiv-lib/ Chivalry/ "continued testing"
Administrator abc1234

我正在考慮透過不同的方式來傳遞這些論點。例如,fm-git -f filename -r repository ...fm-git --filename filename --repository repository...。我還在考慮進行usernamepassword參數配置設置,因為它們通常不會改變,然後可以從實用程式呼叫中刪除它們。

當實用程式參數很多但又是必要的時,維持實用程式呼叫可讀性的公認做法是什麼?

答案1

通常,unix 應用程式允許多種方式來提供此訊息,更「具體」的方式會覆蓋不太具體的方式。

所以你有了:

  • 對於圖形應用程序,所使用的工具包幾乎總是提供某種方式來獲取資源(例如xrdb普通 X 中的 -style 等)

  • 設定檔(如果工具包尚未提供)。

  • 命令列選項,包括短格式和長格式(getopt在 C 中很容易使用)

  • 如果沒有給予訊息,則合理的預設值,例如路徑的當前目錄

位置參數僅對少數強制參數有意義,後面可能是檔案清單(因為通配符規範擴展到多個參數)。六件單獨的作品太多了;該順序很難記住,因此請使用這些選項。

對於密碼,提供一種使應用程式從 stdin 讀取密碼的方法可能會有所幫助,可能透過使用特殊值(例如--password --p -)。

使用該應用程式的任何人都可以選擇硬編碼密碼、設定檔中的密碼或讓使用者輸入密碼是否是特定用例的最佳選擇。

答案2

一般來說,最好:

  1. 計算依賴參數,但允許重新定義它們:例如,在您的範例中,您具有filename與 相同的參數$(basename repository),因此您可能只需要儲存庫,但可以選擇--filename提供替代檔案名稱。
  2. 從命令列和ps輸出中隱藏身份驗證。將它們放在某個文件中:可能是$HOME/.fm-git.conf,給予文件更多限制,例如chmod 600 $HOME/.fm-git.conf從文件中讀取它們。有時,它也可以從環境變數中取得使用者名稱和密碼(例如預設使用者名稱是您的系統使用者名稱或SUDO_USER),但可能不是您的情況。

因此,經過兩次優化後,您只有 3 個 cli 參數,我認為這是可以接受的。隨意使用它們作為位置參數或提供一些標誌,例如--comment:如果您進一步在腳本中使用程序,提供長標誌將增強可讀性,但如果您主要從 cli 手動運行程序,則需要輸入更多內容。

無論如何,當你用 Python 寫程式時,我建議你使用argparse模組-- 它將幫助您解析參數並在將來如果您想更改它們時進行更改。

相關內容