0. 前言
- 官方文档
- 官方教程:Argparse Tutorial
- 作用:Python的内置命令行工具。
- 使用流程:
- 构建
argparse.ArgumentParser
实例。 - 通过调用上述实例的
add_argument
方法,添加命令行参数。 - 通过上述实例的
parse_args
方法解析参数。
1. 构建ArgumentParser实例
- 学习构建实例的本质,就是学习其构造器中每个参数的含义。
prog
- 作用:指定程序的名称,可用于
description
等其他参数中中,通过%(prog)s
来指定。 - 默认值:
sys.argv[0]
。
usage
- 作用:简单描述命令的作用。
- 默认值:
%(prog)s [options...]
,大概这个形式。
description
:命令的详细描述。epilog
:帮助文档尾部的信息。parents
- 作用:指定父级
ArgumentParser
实例列表。可以使用父类定义的参数。 - 注意:由于默认不允许有重复的参数,所以父级的
add_help
一般设置为False
。
formatter_class
:用于指定帮助文档格式。prefix_chars
:
- 作用:指定 使用可选参数时 的前置字符。
- 默认值:
-
。
fromfile_prefix_chars
- 作用:当命令过长时,可以放在文件中,命令行指定文件名时,必须先确定前缀。
- 默认值:空。即不指定文件作为命令的一部分。
argument_default
:全局参数默认值,默认为None
。conflict_handler
:若有参数名冲突时,是否报错。默认会报错。add_help
:是否添加-h
以及--help
。allow_abbrev
:
- 作用:若没有冲突的情况下,是否允许使用参数名称缩写指定参数。
- 默认值:允许。
2. add_argument方法
name
or flags
:
- 在
add_argument
的最开始的所有位置参数,都是参数名称。 - 有两种形式:
- 位置参数:
'f'
:前面没有 -
,必选参数。
- 可以定义在可选参数后面,但使用的时候必须在最开始指定。
- 可选参数:
'-f', '--foo'
,前面有-
。
- 测试了一下,应该没有限定在一个
-
后只能有一个字母,即-foo
也是可以的,-foo-foo
也是可以的。 - 如果命名为
--foo-foo
,则在后续使用时-
要转换为下划线_
,即变量名为args.foo_foo
- 注意:位置参数和可选参数不能同时指定。如
add_argument('a', '-f')
是错误的。
action
store
:默认值,保存参数store_const
:保存const
中的常量。store_true
& store_false
:store_const
的特殊形式,表示对应的参数是否存在。append
:将所有值保存为列表。append_const
:将const
中的参数保存。version
:指定版本,需要再指定一个参数version
。help
:发音所有帮助信息。count
:指定关键字出现的次数。
- 例如:
parser.add_argument("-v", "--verbosity", action="count")
-v
:1-vv
:2--verbosity --verbosity
:2- 不指定:
None
。可通过设置 default
来避免获得None
。
nargs
- 指定该参数的参数个数。
- 整数
N
,表示至少有多少参数。 ?
表示0或1个参数。*
0或所有参数。+
所有参数,至少一个。
const
:指定参数default
:指定默认值。type
:指定数据类型。choices
:参数值必须在某个集合中。required
:设置是否必须。help
:介绍参数。metavar
:帮助文档中的默认参数名。dest
:在args
中的属性名称。
3. 实例
def parse_args():
parser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument('-i', `--integer`, type=int, default=0)
parser.add_argument('-s', `--string`, type=str, default="test")
group.add_argument(`--flag`, action="store_true")
group.add_argument(`--float-num`, type=float, default=.5, help="")
parser.add_argument("x", type=int, help="the base")
parser.add_argument("y", type=int, help="the exponent")
args = parser.parse_args()
import argparse
parser = 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("Running '{}'".format(__file__))
if args.verbosity >= 1:
print("{}^{} == ".format(args.x, args.y), end="")
print(answer)