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
,可是不能同时使用。