argparse 是python自带的命令行参数解析包,可以用来方便地读取命令行参数。argparse 模块还会自动生成帮助和使用手册,并在用户给程序传入无效参数时报出错误信息。
使用流程
主要有三个步骤:
- 创建 ArgumentParser() 对象
- 调用 add_argument() 方法添加参数
- 使用 parse_args() 解析添加的参数
创建 ArgumentParser() 对象
语法:
parser = argparse.ArgumentParser()
一般这样即可,全部可选参数如下。
class argparse.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 - 描述程序用途的字符串(默认值:从添加到解析器的参数生成)
- description - 在参数帮助文档之前显示的文本(默认值:无)
- epilog - 在参数帮助文档之后显示的文本(默认值:无)
- parents - 一个 ArgumentParser 对象的列表,它们的参数也应包含在内
- formatter_class - 用于自定义帮助文档输出格式的类
- prefix_chars - 可选参数的前缀字符集合(默认值:’-’)
- fromfile_prefix_chars - 当需要从文件中读取其他参数时,用于标识文件名的前缀字符集合(默认值:None)
- argument_default - 参数的全局默认值(默认值: None)
- conflict_handler - 解决冲突选项的策略(通常是不必要的)
- add_help - 为解析器添加一个 -h/–help 选项(默认值: True)
- allow_abbrev - 如果缩写是无歧义的,则允许缩写长选项 (默认值:True)
通常会使用usage和description参数,以在使用时获取帮助信息。
调用 add_argument() 方法添加参数
ArgumentParser.add_argument(name or flags…[, action][, nargs][,const][, default][, type][, choices][, required][, help][, metavar][,dest])
各个参数作用如下:
- name or flags - 一个命名或者一个选项字符串的列表,例如 foo 或 -f, --foo。
- action - 当参数在命令行中出现时使用的动作基本类型。
- nargs - 命令行参数应当消耗的数目。
- const - 被一些 action 和 nargs 选择所需求的常数。
- default - 当参数未在命令行中出现时使用的值。
- type - 命令行参数应当被转换成的类型。
- choices - 可用的参数的容器。
- required - 此命令行选项是否可省略 (仅选项可用)。
- help - 一个此选项作用的简单描述。
- metavar - 在使用方法消息中使用的参数值示例。
- dest - 被添加到 parse_args() 所返回对象上的属性名。
分为添加位置参数和可选参数
添加位置参数声明的参数名前缀不带-或–,按照顺序进行解析,在命令中必须出现,否则报错,命令通常为:
parser.add_argument("a")
parser.add_argument("b")
parser.add_argument("c")
添加可选参数声明的参数名前缀带-或–,前缀是-的为短参数,前缀是–是长参数,两者可以都有,也可以只有一个,短参数和长参数效果一样。可选参数的值接在位置参数的后面,不影响位置参数的解析顺序。
以深度学习训练中经常出现的为例:
parser.add_argument('--batch-size', type=int, default=64, metavar='N',
help='input batch size for training (default: 64)')
parser.add_argument('--momentum', type=float, default=0.5, metavar='M',
help='SGD momentum (default: 0.5)')
parser.add_argument('--no-cuda', action='store_true', default=False,
help='disables CUDA training')
parser.add_argument('--save-model', action='store_true', default=False,
help='For Saving the current Model')
其中action参数的’store_true’指的是:触发action时为真,不触发则为假。即储存了一个bool变量,默认为false,触发不用赋值即变为true。
type:指定参数类别,默认是str,传入其他类型要定义。
help:一些提示信息。
default:默认值。
metavar:在 usage 说明中的参数名称,对于必选参数默认就是参数名称,对于可选参数默认是全大写的参数名称。
使用 parse_args() 解析添加的参数
命令:
args = parser.parse_args()
这样args就有了参数属性,可以用args了。
示例
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-a', type=int,help='input a int')
args = parser.parse_args()
print(args.a)
更多内容可参考:
argparse