Python 開發命令列工具

Yusheng發表於2016-04-11

Python 作為一種指令碼語言,可以非常方便地用於系統(尤其是*nix系統)命令列工具的開發。Python 自身也整合了一些標準庫,專門用於處理命令列相關的問題。

命令列工具的一般結構

CL-in-Python

1. 標準輸入輸出

*nix 系統中,一切皆為檔案,因此標準輸入、輸出可以完全可以看做是對檔案的操作。標準化輸入可以通過管道(pipe)或重定向(redirect)的方式傳遞:

儲存為 reverse.py,通過管道 | 傳遞:

通過重定向 傳遞:

2. 命令列引數

一般在命令列後追加的引數可以通過 sys.argv 獲取, sys.argv 是一個列表,其中第一個元素為當前指令碼的檔名:

執行上面的指令碼:

對於比較複雜的命令列引數,例如通過 --option 傳遞的選項引數,如果是對 sys.argv 逐項進行解析會很麻煩,Python 提供標準庫 argparse(舊的庫為 optparse,已經停止維護)專門解析命令列引數:

利用 argparse 可以很方便地解析選項引數,同時可以定義指定引數的相關屬性(是否必須、預設值等),同時還可以自動生成幫助文件。執行上面的指令碼:

3. 執行系統命令

當 Python 能夠準確地解讀輸入資訊或引數之後,就可以通過 Python 去做任何事情了。這裡主要介紹通過 Python 呼叫系統命令,也就是替代 Shell 指令碼完成系統管理的功能。我以前的習慣是將命令列指令通過 os.system(command) 執行,但是更好的做法應該是用 subprocess 標準庫,它的存在就是為了替代舊的 os.system; os.spawn*

subprocess 模組提供簡便的直接呼叫系統指令的call()方法,以及較為複雜可以讓使用者更加深入地與系統命令進行互動的Popen物件。

如果只是簡單地執行系統命令還不能滿足你的需求,可以使用 subprocess.Popen 與生成的子程式進行更多互動:

打賞支援我寫出更多好文章,謝謝!

打賞作者

打賞支援我寫出更多好文章,謝謝!

Python 開發命令列工具

相關文章