前言
许多demo用argparse封装模型训练的参数,然后在执行的脚本后接自定义的参数,非常好用。但需要以debug方式调试训练的主脚本,且输入自定义参数,该如何做——解决方案:调用parse_args时传入参数列表
。
argparse模块主要包含一个类及两个方法:ArgumentParser类、add_argument方法与parse_args方法,下面按顺序记录其主要用法。
ArgumentParser Class
ArgumentParser实例会封装传入脚本命令行参数的所有信息,其签名如下所示:
ArgumentParser(prog=None, usage=None, description=None, epilog=None,
parents=[], formatter_class=argparse.HelpFormatter,
prefix_chars='-', fromfile_prefix_chars=None,
argument_default=None, conflict_handler='error',
add_help=True, allow_abbrev=True)
所有参数需以关键字形式传递,各参数的简要含义如下:
- prog参数指定程序名称,默认为sys.argv[0]。
- usage参数指定帮助信息的usage的名称。
- desciption参数指定ArgumentParser的描述信息,该信息显示在帮助信息的选项部分之前。
- epilog参数指定描述信息,该信息显示在帮助信息中的选项部分之后。
- parents参数值为ArgumentParser实例组成的列表,列表中ArgumentParser实例的可选参数会成为当前参数解析器的组成部分。
- formatter_class指定帮助信息的格式。
- prefix_chars指定选项的前缀,帮助参数解析器识别可选参数的名称。
- fromfile_prefix_chars指定从文件中读取选项前缀的标注符号。
- argument_default指定解析器全局的默认值。
- conflict_hander指定冲突的解决方式。
- add_help会指定解析器默认添加“-h”选项,通过
python my_script.py --help
可参看帮助信息。 - allow_abbrev指定允许使用简称。
add_argument method
创建ArgumentParser解析器后,通过add_argument方法可以为解析器添加自定义的参数。add_argument的签名如下:
add_argument(name or flags...[, action][, nargs][, const]
[, default][, type][, choices][, required]
[, help][, metavar][, dest])
name_or_flags
值为变量名称,或者选项名称。选项名称默认以“-”标识符号标识,当ArgumentParser实例调用parse_args方法时,解析“-”标识符的名称为选项参数,并将相应的值赋值给选项参数,剩下的值依次赋值给位置参数,位置参数就是单纯的变量名称,不包含前缀标识符“-”。
action
action参数非常重要,其指定当解析器遇到定义的选项或者位置变量时,应该怎样处理命令行参数,常用选项值如下:
-
“store”:为默认值,表示仅将命令行参数值赋值为选项或者位置参数。
-
“store_const”: 存储const关键字参数指定的值,而非命令行参数值。
-
“store_true” | “store_false”:“store_const”的特殊形式,“store_true”是const关键词参数的值为True,与action='store_const’的结合,default关键词参数的值为False,是反向的; “store_false”是const关键词参数的值为False,与action='store_const’的结合,其default关键词参数的值为True。
-
“append”:存储一个列表,将对应的值append到列表尾部。
-
“append_const”: 存储一个列表,将const关键词参数指定的值添加到列表尾部。
-
“count”:计数选项出现的次数。
可以继承Action类,自定义__init__和__call__方法, 实现自定义action行为。
nargs
默认是将每一个命令行参数对应给一个选项或者位置参数,通过nargs参数可以指定将任意个命令行参数对应给特定的选项或者位置参数。常用参数值为:
- “N”:一个正整数值,表示数量。
- “?”:消费0个或者1个命令行参数,当不传递命令行参数时,会从const关键词或者default关键词处取值。
- “*”: 消费任意多个命令行参数,这些参数将以列表的形式存储。
- “+”:消费1个或者任意多个命令行参数,以列表形式存储。
注意当指定nargs=1时候,`是以列表形式存储一个参数值``。
const
指定一个常量,该常量将用于action=‘store_const’、action=‘append_const’或者nargs=?场景。
default
指定默认值,当调用时没有在传递命令行参数,则取默认值。
type
默认命令行参数时str类型,通过type可以指定为任意类型,其值是任意可调用对象,包括python内置的格式及内置函数
。
choices
指定一个容器,包含若干个可选参数值,定义的选项或者位置参数的取值只能从指定范围内选取。
required
指定选项是否为必须。
help
指定帮助信息。
dest
指定属性名。可以为不同选项指定相同的属性名。
parse_args method
parse_args将定义的参数转换成对象,并将这些对象作为命名空间的属性。签名为:
ArgumentParser.parse_args(args=None, namespace=None)
- args取值为一个列表,默认值为sys.argv。
- namespace默认为一个新的空的命名空间。
因此可以在调试模式下,当parser_args方法中输入位置参数|选项及对应的值,则解析器会将指定的参数值存储到唯一的命名空间中。