python中的argparse

argparse是python用於解析命令行參數和選項的標準模塊,用於代替已通過時的optparse模塊。argparse模塊的做用是用於解析命令行參數。python

 

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

 

1 import argparse
2 parser = argparse.ArgumentParser()

 

 

運行結果:this

1 $ python 1.py
2 $ 

 

 

 

定位參數:spa

 1 import argparse
 2 parser=argparse.ArgumentParser()
 3 
 4 
 5 parser.add_argument("echo")
 6 parser.add_argument("hello")
 7 
 8 args = parser.parse_args()
 9 
10 print args.ehco

 

運行:命令行

 1 $python 1.py
 2 usage: 1.py [-h] echo hello
 3 1.py: error: too few arguments
 4 
 5 $python 1.py echo
 6 usage: 1.py [-h] echo hello
 7 1.py: error: too few arguments
 8 
 9 
10 $python 1.py echo hello
11 echo

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

而且argparse是默認字符串,若是以數字形式輸入會報錯,以下面代碼所示:blog

1 import argparse
2 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 4
Traceback (most recent call last):
  File "1.py", line 5, in <module>
    print args.square**2
TypeError: unsupported operand type(s) for ** or pow(): 'str' and 'int'

必須將代碼增長type=你須要的類型(像這裏須要int類型):源碼

1 import argparse
2 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:string

雖然如今幫助信息已經很美觀了,可是還不夠好。例如咱們知道echo是個定位參數,可是殊不知道該參數的意思,只能經過猜或者讀源碼。下面,咱們可讓它更有幫助:

1 import argparse
2 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 -h
2 usage: 1.py [-h] echo
3 
4 positional arguments:
5   echo        echo the string you use here
6 
7 optional arguments:
8   -h, --help  show this help message and exit

 

 

 

參考類型:

通常來講,若是不指定參數類型的話,argparse默認爲字符串類型,能夠經過type來指定;

1 import argparse
2 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 argparse
2 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 1
verbosity turned on
$ python 1.py
$ python 1.py --help
usage: prog.py [-h] [--verbosity VERBOSITY]

 

關於可選參數還有一個簡寫

1 import argparse
2 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 -v
2 verbosity turned on
3 $ python prog.py --help
4 usage: prog.py [-h] [-v]
5 
6 optional arguments:
7   -h, --help     show this help message and exit
8   -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 -q
2 $11111

 

 另外一個方法add_mutually_exclusive_group():

1 import argparse
2 
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 -q
2 usage: 1.py [-h] [-v | -q]
3 test.py: error: argument -q/--quiet: not allowed with argument -v/--verbose

代表了能夠使用-v或者-q,可是不能同時使用。

相關文章
相關標籤/搜索