argparse 是便于对命令行参数进行解析的 Python 内置库。
文档:https://docs.python.org/zh-cn/3/library/argparse.html
简单例子
1 | import argparse |
ArgumentParser
使用 argparse 的第一步是创建一个 ArgumentParser 对象,该对象可以看作是一个命令行的解析器。
ArgumentParser 对象包含将命令行解析成 Python 数据类型所需的全部信息。具体参数表如下所示
1 | class argparse.ArgumentParser( |
ArgumentParser.add_argument()
定义单个的命令行参数应当如何解析,每个形参都在下面有它自己更多的描述
1 | ArgumentParser.add_argument(name or flags...[, action][, nargs][, const][, default][, type][, choices][, required][, help][, metavar][, dest]) |
name or flags
: 一个命名或者一个选项字符串的列表,例如foo
或-f, --foo
。action
: 当参数在命令行中出现时使用的动作基本类型。nargs
: 命令行参数应当消耗的数目。("N", "?", "*", "+",分别表示 N 个,一个,0个或多个,1个或多个,类似正则匹配里面的)const
: 被一些 action 和 nargs 选择所需求的常数。default
: 当参数未在命令行中出现并且也不存在于命名空间对象时所产生的值。type
: 命令行参数应当被转换成的类型。choices
: 可用的参数的容器。required
: 此命令行选项是否可省略 (仅选项可用)。help
: 一个此选项作用的简单描述。metavar
: 在使用方法消息中使用的参数值示例(显示名称)。dest
: 被添加到 parse_args() 所返回对象上的属性名(属性名)。
参数名
可以创建位置参数和选项参数,区别是有没有前缀,即 ArgumentParser 中的 prefix_chars.
action
'store'
- 存储参数的值。这是默认的动作。'store_const'
- 存储被 const 命名参数指定的值。'store_const'
动作通常用在选项中来指定一些标志。'store_true'
and'store_false'
- 这些是'store_const'
分别用作存储True
和False
值的特殊用例。另外,它们的默认值分别为False
和True
(注意,这里默认值是反的,意思是store_true
只有参数出现才是true
,否则默认是false
)。'append'
- 存储一个列表,并且将每个参数值追加到列表中。在允许多次使用选项时很有用。'append_const'
- 这存储一个列表,并将 const 命名参数指定的值追加到列表中。(注意 const 命名参数默认为None
。)'append_const'
动作一般在多个参数需要在同一列表中存储常数时会有用。'count'
- 计算一个关键字参数出现的数目或次数。对于一个增长的详情等级来说有用。请注意,default 将为None
,除非显式地设为 0。'help'
- 打印所有当前解析器中的选项和参数的完整帮助信息,然后退出。默认情况下,一个 help 动作会被自动加入解析器。'version'
- 期望有一个version=
命名参数在 add_argument() 调用中,并打印版本信息并在调用后退出,例如parser.add_argument('--version', action='version', version='%(prog)s 2.0')
.'extend'
- 这会存储一个列表,并将每个参数值加入到列表中。- 3.9 支持自定义,详细见 说明 吧。
type
默认情况下,解析器会将命令行参数当作简单字符串读入,
type
关键字允许执行任何必要的类型检查和类型转换。
如果 type 关键字使用了 default 关键字,则类型转换器仅会在默认值为字符串时被应用。
不建议将 bool() 函数用作类型转换器。
它所做的只是将空字符串转为 False
而将非空字符串转为
True
。 这通常不是用户所想要的。
choices
某些命令行参数应当从一组受限值中选择。 当执行命令行解析时,参数值将被检查,如果参数不是可接受的值之一就将显示错误消息。
请注意 choices 容器包含的内容会在执行任意 type 转换之后被检查,因此 choices 容器中对象的类型应当与指定的 type 相匹配
required
required
为 True
要求选项为必须的,若命令行中没有出现,会报错
ArgumentParser.parse_args()
将参数字符串转换为对象并将其设为命名空间的属性。 返回带有成员的命名空间。
1 | ArgumentParser.parse_args(args=None, namespace=None) |
- args - 要解析的字符串列表。 默认值是从 sys.argv 获取。
- namespace - 用于获取属性的对象。 默认值是一个新的空 Namespace 对象。
参数组
使用方法 add_argument_group
添加参数组
1 | ArgumentParser.add_argument_group(title=None, description=None) |
默认有 位置参数 和 可选参数 两组
互斥
使用方法 add_mutually_exclusive_group
添加参数组
1 | ArgumentParser.add_mutually_exclusive_group(required=False) |
创建一个互斥组。 argparse
将会确保互斥组中只有一个参数在命令行中可用,required 为
True
要求至少有存在一个参数
部分解析
1 | ArgumentParser.parse_known_args(args=None, namespace=None) |
有时一个脚本可能只解析部分命令行参数,而将其余的参数继续传递给另一个脚本或程序。 在这种情况下,parse_known_args() 方法会很有用处。 它的作用方式很类似 parse_args() 但区别在于当存在额外参数时它不会产生错误。 而是会返回一个由两个条目构成的元组,其中包含带成员的命名空间和剩余参数字符串的列表。
可以这样使用
1 | args, unparsed = parser.parse_known_args() |