主要学习官网文档
模块功能的介绍
argparse 模块的作用就是 在程序外加一个接口 通过命令的方式
向程序传入参数
可类比 ls -l 的例子 其中 -l就是可以看成一个参数
该模块 也有很多的参数 有可选参数 和默认的参数 其特点是 所有参数
均可自行定义
1 2 3 import argparse parser = argparse.ArgumentParser() parser.parse_args()
位置参数的介绍
1 2 3 4 5 import argparseparser = argparse.ArgumentParser() parser.add_argument("echo" ) args = parser.parse_args() print (args.echo)
1 2 python3 prog.py foo foo
还可以添加一些描述性的内容
1 2 3 4 5 import argparseparser = argparse.ArgumentParser() parser.add_argument("echo" , help ="echo the string you use here" ) args = parser.parse_args() print (args.echo)
当输入的参数未声明类型的时候 默认是字符所以无法进行数字运算
1 2 3 4 5 6 7 8 9 10 11 12 import argparseparser = argparse.ArgumentParser() parser.add_argument("square" , help ="display a square of a given number" ) args = parser.parse_args() print (args.square**2 python3 prog.py 4 Traceback (most recent call last): File "prog.py" , line 5 , in <module> print (args.square**2 ) TypeError: unsupported operand type (s) for ** or pow (): 'str' and 'int
通过在add方法中 加入type = int 来指定类型
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 6 7 import argparseparser = argparse.ArgumentParser() parser.add_argument("--verbosity" , help ="increase output verbosity" ) args = parser.parse_args() if args.verbosity: print ("verbosity turned on" )
可以给参数接受的类型时 如果只有两种选择 True and
False,可以采用action = 'store_true'来表示
1 2 3 4 5 6 7 8 9 10 11 12 13 14 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" ) python3 prog.py --verbose verbosity turned on python3 prog.py --verbose 1 usage: prog.py [-h] [--verbose] prog.py: error: unrecognized arguments: 1
短选项
可以使用一个-和一个字母来代替较长的参数
1 2 3 4 5 6 7 8 9 10 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" ) python3 prog.py -v verbosity turned o
结合位置参数和可选参数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 import argparseparser = argparse.ArgumentParser() parser.add_argument("square" , type =int , help ="display a square of a given number" ) parser.add_argument("-v" , "--verbose" , action="store_true" , help ="increase output verbosity" ) args = parser.parse_args() answer = args.square**2 if args.verbose: print (f"the square of {args.square} equals {answer} " ) else : print (answer) python3 prog.py usage: prog.py [-h] [-v] square prog.py: error: the following arguments are required: square python3 prog.py 4 16 python3 prog.py 4 --verbose the square of 4 equals 16 python3 prog.py --verbose 4 the square of 4 equals 16
我们带回了一个位置参数,结果发生了报错。
注意顺序无关紧要
还可有通过choices 关键字来限定参数的输入范围
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 import argparseparser = argparse.ArgumentParser() 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 ], help ="increase output verbosity" ) args = parser.parse_args() answer = args.square**2 if args.verbosity == 2 : print (f"the square of {args.square} equals {answer} " ) elif args.verbosity == 1 : print (f"{args.square} ^2 == {answer} " ) else : print (answer)
还可以用count参数来表示输入参数的数字
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 import argparseparser = argparse.ArgumentParser() parser.add_argument("square" , type =int , help ="display the square of a given number" ) parser.add_argument("-v" , "--verbosity" , action="count" , help ="increase output verbosity" ) args = parser.parse_args() answer = args.square**2 if args.verbosity == 2 : print (f"the square of {args.square} equals {answer} " ) elif args.verbosity == 1 : print (f"{args.square} ^2 == {answer} " ) else : print (answer) python3 prog.py 4 16 python3 prog.py 4 -v 4 ^2 == 16 python3 prog.py 4 -vv the square of 4 equals 16 python3 prog.py 4 --verbosity --verbosity the square of 4 equals 16 python3 prog.py 4 -v 1 usage: prog.py [-h] [-v] square prog.py: error: unrecognized arguments:
还可以加入一些默认值 default
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 import argparseparser = argparse.ArgumentParser() parser.add_argument("x" , type =int , help ="the base" ) parser.add_argument("y" , type =int , help ="the exponent" ) parser.add_argument("-v" , "--verbosity" , action="count" , default=0 ) args = parser.parse_args() answer = args.x**args.y if args.verbosity >= 2 : print (f"{args.x} to the power {args.y} equals {answer} " ) elif args.verbosity >= 1 : print (f"{args.x} ^{args.y} == {answer} " ) else : print (answer) python3 prog.py usage: prog.py [-h] [-v] x y prog.py: error: the following arguments are required: x, y python3 prog.py -h usage: prog.py [-h] [-v] x y positional arguments: x the base y the exponent options: -h, --help show this help message and exit -v, --verbosity python3 prog.py 4 2 -v 4 ^2 == 16
以及有可能两个参数产生矛盾 要尽可能避免
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 import argparseparser = argparse.ArgumentParser() 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} " ) 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