使用argparse的第一步是先创建一个ArgumentParser对象,ArgumentParser对象包含了将命令行解析成为Python数据类型所需要的全部信息。创建过程如下:
parser = argparse.ArgumentParser(description=‘Process some integers.’)
在学习argparse模块的时候,搞清楚命令行位置参数和可选参数这两个概念十分有必要。基于位置的参数,参数的出现不需要前缀(以 - 或 – 开头的),而且是必须配置的参数。定义argparse模块的位置参数,参数名称不要有前缀(- 或 --),argparse模块使用这个前缀来判断是位置参数,还是可选参数。
对于位置参数如果没有配置的话,就会报错:
error: the following arguments are required:
位置参数在命令行中的出现和配置顺序,与代码中参数的定义顺序是对应的。如果定义了多个位置参数,命令行输入参数的时候,顺序要与多个参数的定位顺序保持一致
凡是用 - 或者 – 开头定义的命令行参数,都属于可选参数。里有一个约定俗成的惯例:单个字母只是用一个 - ,多个字母使用两个 - (–)。
parser = argparse.ArgumentParser()
parser.add_argument('-s','--sn')
args = parser.parse_args()
if args.sn: print(args.sn)
else: print('no argument')
这里面’-s’是’–sn’的简写。参考linux的命令行参数风格(linux命令行参数风格)
通过ArgumentParser的add_argument()方法完成。这些信息在使用parse_args()方法被调用时,被存储和使用。例如:
parser.add_argument('exp', type=str)
parser.add_argument('--name', type=str)
parser.add_argument('--batch_size',type=int, help='Batch size for training')
必须参数:
In [13]: parser.parse_args(['base.yaml','--name','resnet18','--batch_size','13'])
Out[13]: Namespace(batch_size=13, exp='base.yaml', name='resnet18')
>>> parser.add_argument('--foo', nargs='*')
>>> parser.add_argument('--bar', nargs='*')
>>> parser.add_argument('baz', nargs='*')
>>> parser.parse_args('a b --foo x y --bar 1 2'.split())
Namespace(bar=['1', '2'], baz=['a', 'b'], foo=['x', 'y'])
使用parse_args()方法解析参数。通常脚本中该方法不需要传入参数。会自动将参数字符串转换为对象,并将其设为命名空间的属性。返回带有成员的命名空间。
args = parser.parse_args()
一旦被parse_args()方法解析后,可以通过arg.参数名的方式得到这个参数。