这个教程是对argparse的用法总结,argparse是用于处理命令行参数的利器,这里介绍其常见的使用方法。
简单的使用
# test.py
import argparse
parser = argparse.ArgumentParser() # 创建解析器
parser.add_argument('--name', type=str) # 添加需要解析的参数name,类型为str
config = parser.parse_args() # 解析,其返回值可作为字典使用
print(config.name) # 输出解析结果
在bash中输入:python test.py --name fyy
,即指定了name的值为fyy。如果没有指定name的具体值,这默认为None。
add_argument介绍
添加各种类型的参数
add_argument函数是使用的核心,通过指定不同的参数,可以完成不同的效果,下面来按顺序介绍。
# 指定不同的类型基础类型
parser.add_argument('--t_int', type=int)
parser.add_argument('--t_float', type=float)
parser.add_argument('--t_str', type=str)
使用时在控制台输入:python test.py --t_int 1 --t_float 2.0 --t_str nihao
# 指定bool类型时需要特别注意,不能直接指定type为bool,这样所有的输出都是True
parser.add_argument('--t_bool', type=bool) # 错误
parser.add_argument('--t_ture', action='store_true')
parser.add_argument('--t_false', action='store_false')
输入python test.py --t_ture
为True,而当输入python test.py
时为False
输入python test.py --t_false
为False,而当输入python test.py
时为True
# 指定多个参数
parser.add_argument('--values', nargs='+', type=int)
输入时用空格分隔:python test.py --values 1 2 3
指定默认值
每次运行程序都得指定这么多变量稍显繁琐,可以在添加参数时指定一个默认值,当未指定该变量时,即使用该默认值,推荐使用。
# 指定默认值
parser.add_argument('--name', type=str, default='fyy')
parser.add_argument('--nums', type=int, nargs='+', default=[1, 2, 3])
指定帮助信息
作用类似于注释。但相较于注释,其好处是不需要阅读原码也能知道其作用,只需要在终端输入:python tesst.py -h
就能查看到help的信息,推荐使用。
# 指定帮助信息
parser.add_argument('--name', type=str, default='fyy', help='使用者姓名')
指定参数范围
为了增强程序的鲁棒性,可以限制传递参数的取值范围,特别适合用于限制有限的选择,例如损失函数。
# loss的值只能未L1, L2, CE中的一个
parser.add_argument('--loss', type=str, default='L1', choices=['L1', 'L2', 'CE'])
# 配合list
parser.add_argument('--loss', type=str, default=['L1'], choices=['L1', 'L2', 'CE'], nargs='+')
命令缩写
对于某些场景的选项,每次都输入完整的名称稍显繁琐,可以给其指定缩写,在输入命令时可以用缩写,但是访问解析的字典时,还是要用全称。
# 注意缩写是一个-
parser.add_argument('-n', '--name', type=str)