通過範例學習如何優化Python命令行界面(上) — 好文分享
{翻譯至:https://blog.sicara.com/perfect-python-command-line-interfaces-7d5d4efad6a2}
此篇文將教您如何製作完美的Python命令行界面,以提高您的團隊生產力和舒適度。
作為Python開發人員,我們總是使用和編寫命令行界面。 例如,在原文章作者的Data Science項目中,利用命令行運行幾個腳本來訓練他的模型併計算算法的準確性。
讓整個介面更直觀是提高工作效率的好方法,這樣編輯腳本也會比較方便,特別是當您是多個開發人員共同開發一個項目時。
為了實現這一目標,原文章作者建議您遵守以下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’來使用解密模式(實際上只需使用 與鑰匙相對的鑰匙)。
我們的腳本最後看起來像這段代碼:
該腳本尊守以下規範:
- 有一個默認輸入值和一個默認模式
- 有處理基本錯誤情況(未提供輸入文本或未知參數)
- 在這些錯誤情況下顯示一個錯誤訊息,並在調用沒有參數的腳本時:
> python caesar_script_using_sys_argv.pyUsage: python caesar.py [ --key <key> ] [ --encrypt|decrypt ] <text>
但是,這個版本的凱薩腳本很長(39行,甚至不包括加密本身的邏輯)並且不太簡潔。
所以必須有一種更好的方法來解析命令行參數……