通過範例學習如何優化Python命令行界面(上) — 好文分享

林品融
Taiwan Code School
Published in
3 min readJan 14, 2019

{翻譯至:https://blog.sicara.com/perfect-python-command-line-interfaces-7d5d4efad6a2}

此篇文將教您如何製作完美的Python命令行界面,以提高您的團隊生產力和舒適度。

作為Python開發人員,我們總是使用和編寫命令行界面。 例如,在原文章作者的Data Science項目中,利用命令行運行幾個腳本來訓練他的模型併計算算法的準確性。

讓整個介面更直觀是提高工作效率的好方法,這樣編輯腳本也會比較方便,特別是當您是多個開發人員共同開發一個項目時。

為了實現這一目標,原文章作者建議您遵守以下4條準則:

  1. 您應該盡可能提供默認參數值
  2. 應該盡可能的處理所有錯誤情況(例如:缺少參數,錯誤類型,找不到文件)
  3. 必須把所有的論點和選項記錄下來(寫上註解)
  4. 應顯示即時執行的進度

我們舉一個簡單的例子

讓我們嘗試將這些規則應用於一個具體且簡單的範例中:使用凱薩密碼加密和解密消息的腳本。

假設您已經編寫了一個加密函數(如下所示),並且您希望創建一個允許加密和解密消息的簡單腳本。 我們希望讓用戶選擇加密(默認情況下)和解密之間的模式,並使用命令行參數選擇密鑰(默認為1)。

我們的腳本需要做的第一件事是獲取命令行參數的值。 當我在google上搜尋“python命令行參數”時,我得到的第一個結果是關於sys.argv。 所以讓我們來嘗試使用這種方法吧……

“初學者”方法

sys.argv是一個列表,其中包含用戶在運行腳本時鍵入的所有參數(包括腳本名稱本身)。

例如,如果我輸入:

> python caesar_script.py --key 23 --decrypt my secret messagepb vhfuhw phvvdjh

該清單包含:

['caesar_script.py', '--key', '23', '--decrypt', 'my', 'secret', 'message']

所以我們將循環這個參數列表,尋找一個’ — key’(或’-k’)來知道輸入值,並尋找一個’ — decrypt’來使用解密模式(實際上只需使用 與鑰匙相對的鑰匙)。

我們的腳本最後看起來像這段代碼:

該腳本尊守以下規範:

  1. 有一個默認輸入值和一個默認模式
  2. 有處理基本錯誤情況(未提供輸入文本或未知參數)
  3. 在這些錯誤情況下顯示一個錯誤訊息,並在調用沒有參數的腳本時:
> python caesar_script_using_sys_argv.pyUsage: python caesar.py [ --key <key> ] [ --encrypt|decrypt ] <text>

但是,這個版本的凱薩腳本很長(39行,甚至不包括加密本身的邏輯)並且不太簡潔。

所以必須有一種更好的方法來解析命令行參數……

--

--