argparse模块
argparse可以让用户在运行python程序时传入参数
最简单的例子
1 2 3 4 5 6 7 8 import argparseparser = argparse.ArgumentParser(description="program description" ) parser.add_argument("echo" ) args = parser.parse_args() print (args.echo)
parser.add_argument()
基础使用
1 2 3 import argparseparser = argparse.ArgumentParser() parser.add_argument("echo" , help ="echo the string you use here" )
这样在输入下面命令行时就会出现提示
1 2 3 4 5 6 7 8 $ python prog.py -h usage: prog.py [-h] echo positional arguments: echo echo the string you use here options: -h, --help show this help message and exit
指定输入类型
通常接收的参数默认为字符串类型,你也可以指定为其他类型
1 2 3 4 5 6 import argparseparser = argparse.ArgumentParser() parser.add_argument("square" , help ="display a square of a given number" , type =int ) args = parser.parse_args() print (args.square**2 )
这样程序就会正确输出,并且对于非法参数会给出提示
1 2 3 4 5 $ python prog.py 4 16 $ python prog.py four usage: prog.py [-h] square prog.py: error: argument square: invalid int value: 'four'
可选参数
1 2 3 4 5 6 import argparseparser = argparse.ArgumentParser() parser.add_argument("--verbosity" , help ="increase output verbosity" ) args = parser.parse_args() if args.verbosity: print ("verbosity turned on" )
关于输出:
1 2 3 4 5 6 7 8 9 10 11 12 13 $ python prog.py --verbosity 1 verbosity turned on $ python prog.py $ python prog.py --help usage: prog.py [-h] [--verbosity VERBOSITY] options: -h, --help show this help message and exit --verbosity VERBOSITY increase output verbosity $ python prog.py --verbosity usage: prog.py [-h] [--verbosity VERBOSITY] prog.py: error: argument --verbosity: expected one argument
即–前缀的参数名为可选参数,如果没有指定值,则默认为None
action指定为布尔值
但是我们也可以通过action参数改变默认行为,让可选参数默认值为False,传入后为True
1 2 3 4 5 6 7 import argparseparser = argparse.ArgumentParser() parser.add_argument("--verbose" , help ="increase output verbosity" , action="store_true" ) args = parser.parse_args() if args.verbose: print ("verbosity turned on" )
但是需要注意当设置了store_true后,该参数不允许再传入值,否则报错
store_false与之相反
短选项
使用-v可指定短选项
1 2 3 4 5 6 7 import argparseparser = argparse.ArgumentParser() parser.add_argument("-v" , "--verbose" , help ="increase output verbosity" , action="store_true" ) args = parser.parse_args() if args.verbose: print ("verbosity turned on" )
输出为:
1 2 3 4 5 6 7 8 $ python3 prog.py -v verbosity turned on $ python3 prog.py --help usage: prog.py [-h] [-v] options: -h, --help show this help message and exit -v, --verbose increase output verbosity
限制输入
1 2 parser.add_argument("-v" , "--verbosity" , type =int , choices=[0 , 1 , 2 ], help ="increase output verbosity" )
1 2 3 $ python3 prog.py -v 3 usage: prog.py [-h] [-v {0,1,2}] square prog.py: error: argument -v/--verbosity: invalid choice: 3 (choose from 0, 1, 2)
action 统计出现次数
可通过指定为count统计参数的出现次数,返回int值
1 2 3 4 5 6 7 import argparseparser = argparse.ArgumentParser() parser.add_argument("-v" , "--verbosity" , action="count" , help ="increase output verbosity" ) args = parser.parse_args() print (args.verbosity,type (args.verbosity))
1 2 3 4 $ python3 prog.py None <class 'NoneType' > $ python3 prog.py -vv 2 <class 'int' >
default 制定默认值
1 2 3 4 5 6 7 import argparseparser = argparse.ArgumentParser() parser.add_argument("-v" , "--verbosity" , action="count" , default=0 , help ="increase output verbosity" ) args = parser.parse_args() print (args.verbosity,type (args.verbosity))
1 2 $ python3 prog.py 0 <class 'int' >
案例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 import argparseparser = argparse.ArgumentParser(description="calculate X to the power of Y" ) group = parser.add_mutually_exclusive_group() group.add_argument("-v" , "--verbose" , action="store_true" ) group.add_argument("-q" , "--quiet" , action="store_true" ) parser.add_argument("x" , type =int , help ="the base" ) parser.add_argument("y" , type =int , help ="the exponent" ) args = parser.parse_args() answer = args.x**args.y if args.quiet: print (answer) elif args.verbose: print (f"{args.x} to the power {args.y} equals {answer} " ) else : print (f"{args.x} ^{args.y} == {answer} " )
1 2 3 4 5 6 7 8 9 10 11 12 $ python3 prog.py 4 2 4^2 == 16 $ python3 prog.py 4 2 -q 16 $ python3 prog.py 4 2 -v 4 to the power 2 equals 16 $ python3 prog.py 4 2 -vq usage: prog.py [-h] [-v | -q] x y prog.py: error: argument -q/--quiet: not allowed with argument -v/--verbose $ python3 prog.py 4 2 -v --quiet usage: prog.py [-h] [-v | -q] x y prog.py: error: argument -q/--quiet: not allowed with argument -v/--verbose