简介
argparse模块在pyhon3.2中添加到标准库中
argparse模块可以让我们更方便的开发命令行参数输入。该模块定义了需要什么参数,并且自动从sys.argv中解析参数; 该模块还会自动生成help, usage信息,当用户输入出错时,自动提示。
其他类似模块:
python还有两个类似的模块getopt(类似于C的getopt),和optparse(不推荐使用), argparse是基于optparse的。
如果用户熟悉C的getopt可以用getopt。 如果不熟悉则建议使用argparse,使用argparse可以减少代码量,并且得到更好的帮助和错误信息。
命令行参数需要什么功能?
必选参数
可选的,指定参数,一般指定参数会有长参数和短参数
可选参数需要有值
参数类型
help或者是usage帮助信息
输入有误时的提示
使用介绍
使用基础
import argparse
parser = argparse.ArgumentParser() #创建一个parser对象
parser.parse_args() #将参数字符串转换为对象,并将它们指定为名称空间的属性。返回已填充的名称空间。
运行这段代码可以得到:
$ python3 prog.py
$ python3 prog.py --help
usage: prog.py [-h]
optional arguments:
-h, --help show this help message and exit
$ python3 prog.py --verbose
usage: prog.py [-h]
prog.py: error: unrecognized arguments: --verbose
$ python3 prog.py foo
usage: prog.py [-h]
prog.py: error: unrecognized arguments: foo
占位参数
必须传的参数,不传则报错
基本help是帮助信息
parser.add_argument("echo") #添加占位参数
parser.add_argument("square", help="display a square of a given number")
参数类型
默认情况下,argparse把所有参数默认为strings类型,如果是其他类型,需要指定。
parser.add_argument("square", help="display a square of a given number", type=int)
可选参数
这种情况下,可选参数是需要传入值的。
parser.add_argument("--verbosity", help="increase output verbosity")
不需要传入值的可选参数
使用action="store_true", 它的帮助文本和普通的可选参数也不同。
它的默认为false, 当指定时,为true
parser.add_argument("--verbose", help="increase output verbosity", action="store_true")
组合占位参数和可选参数
占位参数和可选参数,无论是在定义,还是在使用时的位置都不是固定的。任意位置传入参数皆可,但需要注意,需要传入的参数,一定要传入。
指定参数可选范围
choices: 指定数值选择范围, 参数的值只能从这几个里面选,如果不在其中,将会报错
parser.add_argument("-v", "--verbosity", type=int, choices=[0, 1, 2], help="increase output verbosity")
以重复指定次数来达到不同的效果
指定一次值为1 eg: -v
指定两次值为2 eg: -vv
以下是通过action的"count"这个值来实现的。这样就让可指定可选范围的参数更加像是一个flag,
如果不指定,则默认值为None。
parser.add_argument("-v", "--verbosity", action="count", help="increase output verbosity")
为参数指定默认值
使用default选项来为对象指定默认参数
parser.add_argument("-v", "--verbosity", action="count", default=0, help="increase output verbosity")
添加互斥的可选参数
使用方法add_mutually_exclusive_group()生成的对象添加的参数,是互斥的。
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")
使用出错提示:
prog.py: error: argument -q/--quiet: not allowed with argument -v/--verbose
添加命令行的整体说明
在生成对象时,传入description参数,将会显示在help中。
parser = argparse.ArgumentParser(description="calculate X to the power of Y")
#使用help后,得到说明
usage: prog.py [-h] [-v {0,1,2}] [--verbose] [-g] [-t | -p] url data
calculate X to the power of Y
添加可以多次指定的参数
想要通过 --foo aa --foo bbb 来获取 foo=["aa", "bbb"],需要使用action的append值。
# 想要多次指定参数
parser.add_argument("--foo", action="append", type=str)
action其实还store_const, store_true, store_false, append, append_const, count等值,到时候有其他需求再去查。
还有另一个可以控制多个参数的,是nargs参数。需要用时请自行查阅。
整体示例
import argparse
# 使用description进行命令行的整体说明
parser = argparse.ArgumentParser(description="calculate X to the power of Y")
# 必选参数
parser.add_argument("url", help="url is used to get the page source")
# 指定了参数类型的必选参数
parser.add_argument("data", help="url is used to get the page source", type=int)
# 可选参数,且指定了参数可选择的范围
parser.add_argument("-v", "--verbosity", help="increase output verbosity", choices=[0, 1, 2])
# 可以不写传入参数的要选参数, 默认为false,指定为true
parser.add_argument("--verbose", help="increase output verbosity",
action="store_true")
# -g -gg, 可使用多个的参数类型。
parser.add_argument("-g", "--gcount", action="count",
help="you can use -g, -gg ,-ggg", default=0)
# 互斥参数 以下指定 -t -p 为互斥参数,不要同时出现。常见选项有-q, -v
group = parser.add_mutually_exclusive_group()
group.add_argument("-t", "--verbose2", action="store_true")
group.add_argument("-p", "--quiet", action="store_true")
args = parser.parse_args()
print("urls", args.url)
print("data * 2", args.data * 2)
print("verbosity", args.verbosity)
print("verbose", args.verbose)
print("gcount", args.gcount)
参考:
官方文档:
https://docs.python.org/3/library/argparse.html
https://docs.python.org/3/howto/argparse.html#id1 来自这一篇