python中的argparse,pythonargparse

來源:互聯網
上載者:User

python中的argparse,pythonargparse

argparse是python用於解析命令列參數和選項的標準模組,用於代替已經過時的optparse模組。argparse模組的作用是用於解析命令列參數。

 

最基礎的,從一個最簡單的程式開始:

 

import argparseparser = argparse.ArgumentParser()

 

運行結果:

$ python 1.py$ 

 

 

定位參數:

import argparseparser=argparse.ArgumentParser()parser.add_argument("echo")parser.add_argument("hello")args = parser.parse_args()print args.ehco

運行:

$python 1.pyusage: 1.py [-h] echo hello1.py: error: too few arguments$python 1.py echousage: 1.py [-h] echo hello1.py: error: too few arguments$python 1.py echo helloecho

 方法add_argument(),用來指定程式需要接受的命令參數;

並且argparse是預設字串,如果以數字形式輸入會報錯,如下面代碼所示:

 

1 import argparse2 parser=argparse.ArgumentParser()3 parser.add_argument("echo", help="echo the string you use here")4 args=parser.parse_args()5 print args.echo*10

運行:

$ python 1.py 4Traceback (most recent call last):  File "1.py", line 5, in <module>    print args.square**2TypeError: unsupported operand type(s) for ** or pow(): 'str' and 'int'

必須將代碼增加type=你需要的類型(像這裡需要int類型):

1 import argparse2 parser=argparse.ArgumentParser()3 parser.add_argument("echo", help="echo the string you use here", type=int)4 args=parser.parse_args()5 print args.echo*10

 

 

 

--help:

雖然現在協助資訊已經很美觀了,但是還不夠好。例如我們知道echo是個定位參數,但是卻不知道該參數的意思,只能通過猜或者讀源碼。下面,我們可以讓它更有協助:

1 import argparse2 parser = argparse.ArgumentParser()3 parser.add_argument("echo", help="echo the string you use there")4 args = parser.parser_args()5 print args.echo

 運行:

1 $ python 1.py -h2 usage: 1.py [-h] echo3 4 positional arguments:5   echo        echo the string you use here6 7 optional arguments:8   -h, --help  show this help message and exit

 

 

 

參考類型:

一般來說,如果不指定參數類型的話,argparse預設為字串類型,可以通過type來指定;

1 import argparse2 parser = argparse.ArgumentParser()3 parser.add_argument("square", help="display a square of a given number", type=int)4 args = parser.parse_args()5 print args.square**2

 還可以使用default=xx來指定預設參數的值,例如:

1 parser.add_argument("echo", action="count", default=0)

 

 

選擇性參數:

1 import argparse2 parser = argparse.ArgumentParser()3 parser.add_argument("--verbosity", help="increase output verbosity")4 args = parser.parse_args()5 if args.verbosity:6     print "verbosity turned on"

 

運行:

$ python 1.py --verbosity 1verbosity turned on$ python 1.py$ python 1.py --helpusage: prog.py [-h] [--verbosity VERBOSITY]

 

關於選擇性參數還有一個簡寫

1 import argparse2 parser = argparse.ArgumentParser()3 parser.add_argument("-vwww", "--verbose", help="increase output verbosity", action="store_true")4 args = parser.parse_args()5 if args.verbose:6     print "verbosity turned on"

這裡的-vww就是其簡寫,action: store_true / store_false:布爾開關。 store_true.預設為False,輸入則為true。 store_flase 相反;

1 $ python prog.py -v2 verbosity turned on3 $ python prog.py --help4 usage: prog.py [-h] [-v]5 6 optional arguments:7   -h, --help     show this help message and exit8   -v, --verbose  increase output verbosity

在命令列中只要-v和-vwww前面一致就行,如果是-vp就會報錯;如果是-vw,預設是-vwww,也個23是正確的;

 

 注意:

 

1 parser.add_argument("-v", "--verbose", action="store_true",help="increase output verbosity")

 

這些是沒有順序的,當然也可以像上面一樣了;

 

 

 

參數衝突:

迄今為止,我們已經使用到了[argparse.ArgumentParser][6]的兩個方法,來看看他的另一個方法add_mutually_exclusive_group()。它可以讓我們指定某個參數和其他參數衝突。下面來修改下程式以對這個新方法有更多的瞭解:我們將加入參數--quiet,它和參數--verbose衝突,不能同時指定:

 1 import argparse 2 parser = argparse.ArgumentParser() 3 parser.add_argument("-v", "--verbose", type=int, help="the base") 4 parser.add_argument("-q", "--quiet", type=int, help="the exponent") 5  6 args = parser.parse_args() 7 if args.quiet: 8     print "111111" 9 elif args.verbose:10     print "222222"

運行:

1 $python 1.py -v -q2 $11111

 

 

 另一個方法add_mutually_exclusive_group():

1 import argparse2 3 parser = argparse.ArgumentParser()4 group = parser.add_mutually_exclusive_group()5 group.add_argument("-v", "--verbose", action="store_true")6 group.add_argument("-q", "--quiet", action="store_true") 
7 if args.quiet:

8     print "111111"

9 elif args.verbose:

10     print "222222"

運行:

1 python 1.py -v -q2 usage: 1.py [-h] [-v | -q]3 test.py: error: argument -q/--quiet: not allowed with argument -v/--verbose

表明了可以使用-v或者-q,但是不能同時使用。

 

 

 

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.