我們在寫一個可變性比較大的腳本時候,很多情況下我們需要傳入很多個不同的參數,就像我們在終端輸入pip --help時:
它有很多可供我們選擇的的參數,我們可以根據不同的情況進行選擇!Python中提供了很多的模塊,如:sys、getopt、argparse等。
sys模塊:
sys.argv:The list of command line arguments passed to a Python script.
sys.argv[0]:返回腳本的名稱
sys.argv[1]:返回第一個參數
sys.argv[2]:返回第二個參數
腳本sys_test.py:
運行結果:
getopt 模塊
getopt:This module helps scripts to parse the command line arguments in sys.argv.
getopt.getopt(args, options[, long_options])
例一、短格式分析:
使用短格式分析串"abc:d:"。當一個選項只是表示開關狀態時,即后面不帶附加參數時,在分析串中寫入選項字符。當選項后面是帶一個附加參數時,在分析串中寫入選項字符同時后面加一個":"號。所以"abc:d:"就表示"ab"是一個開關選項;"c:d:"則表示后面應該帶一個參數。
例二、長格式分析:
使用長格式分析串列表:['condition=', 'output-file=', 'testing']。長格式串也有開關狀態,即后面不跟"="號。如果跟一個等號則表示后面還應有一個參數。這個長格式表示"testing"是一個開關選項;"condition=、output-file="則表示后面應該帶一個參數。
例三、應用:
運行結果:
Argparse模塊
argparse:the recommended command-line parsing module in the Python standard library.
argparse的用法:
-創建 ArgumentParser() 對象
-調用 add_argument() 添加參數
-使用 parse_args() 解析參數
運行結果:
調用add_argument() 增加參數
運行結果:
我們發現添加的兩個參數“-x”和“y”,分別為位置參數(positional arguments)和可選參數(optional arguments),add_argument()方法必須知道期望的是可選參數,比如-f 或者--foo,還是位置參數,比如一個文件列表。傳遞給add_argument()的第一個參數因此必須是一個標記序列或者一個簡單的參數名字。當調用parse_args()時,可選的參數將以 '-' 前綴標識,剩余的參數將被假定為位置參數,所以我們不使用可選參數-x時,程序可以運行;當我們不使用位置參數 y 時,程序就會報錯!
更多可參考:argparse — 命令行選項、參數和子命令的解析器
docopt模塊
docopt就比較強大了,它是根據你自己寫的help messages(文檔描述),自動為你生成parser。使用之前需要下載相應的庫,這里有個界面可以試用一下docopt的強大,借用官方的一個例子:
管它三七二十一,先運行一下看看:
例子中:
"[]"表示可選參數,如docopt_test.py [-hvqo FILE];
"()"表示必選參數,以及沒有包含在[]中都作為必選參數。
"|" 表示互斥參數
"..."表示接收多個參數值,如docopt_test.py FILE ...
Usage下面的Options里列出了選項(options)及其描述,它具體描述了
選項是否有長/短形式,如-h, --help
選項后面是否帶參數,如--speed=
選項是否有默認值,如[default: 10]
Usage和options里的內容就組成了幫助信息,當用戶輸入-h或--help參數時,命令行就會輸出幫助信息。
docopt會抽取幫助信息里的內容,然后對命令行傳入的參數進行解析。
例二:
運行一下:
返回的arguments是一個dict,根據key取出相應的value值!
但是目前遇到的問題是默認值,不能設置!還請大神們指點迷津!!!