標籤:equal zed 變數 pos ack password 要求 action 用法
argparse模組
argparse是python標準庫裡面用來處理命令列參數的庫。
基本用法
import argparseparser = argparse.ArgumentParser()parser.parse_args()
輸出結果
XXX>python arg_example.pyXXX>python arg_example.py -husage: arg_example.py [-h]optional arguments: -h, --help show this help message and exitXXX>python arg_example.py ausage: arg_example.py [-h]arg_example.py: error: unrecognized arguments: aXXX>
- 第一個沒有任何輸出和出錯
- 第二個測試為列印協助資訊,argparse會自動產生協助文檔
- 第三個測試為未定義的a參數,會出錯
positional arguments
positional arguments為英文定義,中文名叫有翻譯為定位參數的,用法是不用帶-就可用
import argparseparser = argparse.ArgumentParser()parser.add_argument("echo")args = parser.parse_args()print (args.echo)輸出結果:XXX>python arg_example.py aaXXX>python arg_example.py echoechoXXX>python arg_example.pyusage: arg_example.py [-h] echoarg_example.py: error: the following arguments are required: echo
定義了一個叫echo的參數,預設必選
- 第一個測試為正常用法,回顯了輸入字串a
- 第二個測試為不帶參數,由於
echo參數為空白,所以報錯,並給出用法(usage)和錯誤資訊
optional arguments
中文名叫選擇性參數,有兩種方式:
- 一種是通過一個
-來指定的短參數,如-h;
- 一種是通過
--來指定的長參數,如--help
import argparseparser = argparse.ArgumentParser()parser.add_argument("-v", "--verbo", help="verbo usage")args = parser.parse_args()if args.verbo: print ("verbo turned on %s" % args.verbo)輸出結果:XXX>python arg_example.py -v helloverbo turned on helloXXX>python arg_example.py --verbo helloverbo turned on helloXXX>python arg_example.py -husage: arg_example.py [-h] [-v VERBO]optional arguments: -h, --help show this help message and exit -v VERBO, --verbo VERBO verbo usageXXX>python arg_example.py ausage: arg_example.py [-h] [-v VERBO]arg_example.py: error: unrecognized arguments: a
定義了選擇性參數-v或--verbo,通過解析後,其值儲存在args.verbo變數中
- 測試1中,通過-v來指定參數值
- 測試2中,通過--verbos來指定參數值
- 測試3中,通過-h來列印協助資訊
- 測試4中,沒有給-v指定參數值,所以會報錯
action=‘store_true‘
通過定義參數時指定action="store_true",可以像-h那樣,不需要指定參數值
import argparseparser = argparse.ArgumentParser()parser.add_argument("-v", "--verbo", help="verbo usage", action="store_true")args = parser.parse_args()if args.verbo: print("verbo turned on %s" % args.verbo)輸出結果:XXX>python arg_example.py -vverbo turned on TrueXXX>python arg_example.py -husage: arg_example.py [-h] [-v]optional arguments: -h, --help show this help message and exit -v, --verbo verbo usageXXX>python arg_example.py -v hellousage: arg_example.py [-h] [-v]arg_example.py: error: unrecognized arguments: hello
- 測試1中,-v沒有指定任何參數也可,其實存的是True和False,如果出現,則其值為True,否則為False
- 測試2中,通過-h來列印協助資訊
- 測試3中,-v指定參數值,會報錯,因為指定Ture或False
argparse配置參數
可以配置的參數有以下:
- dest: 可以決定解析後,取值時的屬性名稱, 尤其適於有多個等價參數. 不指定時就是選項不加-的字串.
- type: 選項的實值型別,值的預設類型是字串, 這裡將值指定為其他類型.
- default: 預設值. 沒有設定預設值的為None.
- help: 選項中有 -h 時列印的 help 資訊.
- metavar: 表示顯示到 help 中選項的預設值;
- choices: 當 type 設定為 choices 時,需要設定此值.
action: 用於控制對選項和參數的處理,像無參數選項處理,可以設定為以下幾種字串:
- "store": 儲存值到 dest 指定的屬性,強制要求後面提供參數;
- "store_true": 當使用該選項時,後面的 dest 將設定為 true, 不跟參數.
- "store_false": 當使用該選項時,後面的 dest 將設定為 false. 常配合另一個 "store_true" 的選項使用同一個 dest 時使用. 不跟參數.
- "append": 儲存值到 dest 指定的屬性,並且是以數組的形式, 必須跟參數.
- "store_const": 用來儲存參數為 const 設定的值到 dest 指定的屬性當中.常用於 dest 為同名2個以上選項時的處理. 不跟參數.
- "append_const": 用來儲存參數為 const 設定的數組到 dest 指定的屬性當中. 不跟參數.
- "count": 使用後將給儲存值到 dest 指定的屬性值加1,可以統計參數中出現次數.用途不大. 不跟參數.
- "callback": 後面指定回呼函數名(不加括弧),會將相應opt和args傳給回呼函數.
- "help", "version": 對應為協助和版本. 要另外自己設計時使用.
default:
import argparseparser = argparse.ArgumentParser()parser.add_argument("-v", "--verbo", help="verbo usage" ,default=1)args = parser.parse_args()if args.verbo: print("verbo turned on %s" % args.verbo)type
import argparseparser = argparse.ArgumentParser()parser.add_argument(‘-x‘, type=int, help="square")args = parser.parse_args()answer = args.x ** 2print(answer)
choices
import argparseparser = argparse.ArgumentParser(description="calculate X to the power of Y")parser.add_argument("square", type=int, help="display a square of a given number")parser.add_argument("-v", "--verbosity", type=int, choices=[0, 1, 2], default=1, help="increase output verbosity")args = parser.parse_args()answer = args.square**2if args.verbosity == 2: print("the square of {} equals {}".format(args.square, answer))elif args.verbosity == 1: print("{}^2 == {}".format(args.square, answer))else: print(answer)
輸出結果
XXX>python arg_example.py 3 -v 13^2 == 9XXX>python arg_example.py 3 -v 2the square of 3 equals 9XXX>python arg_example.py 33^2 == 9XXX>python arg_example.pyusage: arg_example.py [-h] [-v {0,1,2}] squarearg_example.py: error: the following arguments are required: squareXXX>python arg_example.py -husage: arg_example.py [-h] [-v {0,1,2}] squarecalculate X to the power of Ypositional arguments: square display a square of a given numberoptional arguments: -h, --help show this help message and exit -v {0,1,2}, --verbosity {0,1,2} increase output verbosity
案例ftp用戶端命令列
import argparseparser = argparse.ArgumentParser( description="ftp用戶端,使用-S 127.0.0.1 -P 9988 -u hh -p 123")parser.add_argument("-s", "--server", type=str, default=‘127.0.0.1‘, dest="server", help="ftp server ip_addr")parser.add_argument("-P", "--port", type=int, dest="port", help="ftp server port")parser.add_argument("-u", "--username", type=str, choices=[‘alex‘, ‘egon‘, ‘eva‘], dest="username", help="username info")parser.add_argument("-p", "--password", dest="password", help="password info")args = parser.parse_args()print(‘server:{} port:{} username:{} password:{}‘.format(args.server, args.port, args.username, args.password))
輸出結果
XXX>python arg_example.py -husage: arg_example.py [-h] [-s SERVER] [-P SERVER] [-u {alex,egon,eva}] [-p PASSWORD]ftp用戶端,使用-S 127.0.0.1 -P 9988 -u hh -p 123optional arguments: -h, --help show this help message and exit -s SERVER, --server SERVER ftp server ip_addr -P SERVER, --port SERVER ftp server port -u {alex,egon,eva}, --username {alex,egon,eva} username info -p PASSWORD, --password PASSWORD password infoXXX>python arg_example.py -s 127.0.0.1 -P 9988 -u en -p 123usage: arg_example.py [-h] [-s SERVER] [-P PORT] [-u {alex,egon,eva}] [-p PASSWORD]arg_example.py: error: argument -u/--username: invalid choice: ‘en‘ (choose from ‘alex‘, ‘egon‘, ‘eva‘)XXX>python arg_example.py -s 127.0.0.1 -P 9988 -u alex -p 123server:127.0.0.1 port:9988 username:alex password:123XXX>python arg_example.py -s 127.0.0.1 -P 9988 -u alex -p 123456server:127.0.0.1 port:9988 username:alex password:123456
參考http://yarving.historytale.com/
python argparse模組