argparse是python用于解析命令行参数和选项的标准模块。 下面这个代码是argparse模块的应用格式。仅仅用于声明argparse模块、解析参数,没有实现任何功能。
import argparse #导入模块 parser = argparse.ArgumentParser() #声明argparse模块 parser.parse_args() #解析argparse参数parser.add_argument()函数用于给程序加入必要的参数,程序运行时,必须通过该参数给程序中的变量赋值。如果运行时,没有加入该参数,则程序报错。
import argparse parser = argparse.ArgumentParser() parser.add_argument("echo") args = parser.parse_args() print args.echo程序运行如下:
usage: prog.py [-h] echo prog.py: error: the following arguments are required: echo $ python prog.py --help usage: prog.py [-h] echo positional arguments: echo optional arguments: -h, --help show this help message and exit尽管显示的帮助看起来清楚完整,但它可以比现在更有帮助。比如我们可以知道 echo 是一个位置参数,但我们除了靠猜或者看源代码,没法知道它是用来干什么的。所以,我们可以通过定义help来说明该参数用来干什么。
parser.add_argument("echo", help="echo the string you use here")因为 argparse 会把我们传递给它的选项视作为字符串,除非我们告诉它别这样。所以,我们需要指定数据类型。
parser.add_argument("square", help="display a square of a given number", type=int)此外,程序中可以设置一些可选参数,这些参数一般对于我们的简单程序而言,只有两个值有实际意义:True 或者 False。当程序调用时候加入该参数,则该变量值为True,否则为False。
parser.add_argument("--verbose", help="increase output verbosity", action="store_true")实际应用时,对于可选参数,一般用法如下:在程序中用于if语句中。
import argparse parser = argparse.ArgumentParser() parser.add_argument("--verbose", help="increase output verbosity", action="store_true") args = parser.parse_args() if args.verbose: print "verbosity turned on"有时候,我们可能多次给一个可选参数赋值,此时需要将action="store_true"换成action=“count”。这时程序会记录调用可选参数的次数。用法如下:
import argparse parser = 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 "the square of {} equals {}".format(args.square, answer) elif args.verbosity == 1: print "{}^2 == {}".format(args.square, answer) else: print answer仿真如下:
$ python prog.py 4 16 $ python prog.py 4 -v 4^2 == 16 $ python prog.py 4 -vv the square of 4 equals 16 $ python prog.py 4 --verbosity --verbosity the square of 4 equals 16 $ python prog.py 4 -v 1 usage: prog.py [-h] [-v] square prog.py: error: unrecognized arguments: 1 $ python prog.py 4 -h usage: prog.py [-h] [-v] square positional arguments: square display a square of a given number optional arguments: -h, --help show this help message and exit -v, --verbosity increase output verbosity $ python prog.py 4 -vvv 16如果程序中有两个或多个可选参数,一般在调用中只允许调用一个可选参数,否则出错。
import argparse parser = 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 "{} to the power {} equals {}".format(args.x, args.y, answer) else: print "{}^{} == {}".format(args.x, args.y, answer)仿真如下:
$ python prog.py 4 2 4^2 == 16 $ python prog.py 4 2 -q 16 $ python prog.py 4 2 -v 4 to the power 2 equals 16 $ python 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 $ python 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参考Argparse教程:https://docs.python.org/zh-cn/2/howto/argparse.html#concepts