本文主要记录了在深度学习中,使用别人写的代码时,用来接收用户在命令行里指定传入模型参数的重要方法 parser
同时,本文也给出了简易的示例,方便读者快速开始(只想了解如何使用的话可以直接跳到 3. 使用方法 和 4. 示例)
argparse
模块可以让人轻松编写用户友好的命令行接口
argparse
将弄清如何从 sys.argv
解析出那些参数argparse
模块还会自动生成帮助和使用手册,并在用户给程序传入无效参数时报出错误信息argparse
是 python
用于解析命令行参数和选项的标准模块,用于代替已经过时的 optparse
模块
argparse
模块对命令行接口的支持是围绕 argparse.ArgumentParser
的实例构建的
创建一个新的 ArgumentParser
对象,所有的参数都应当作为关键字参数传入
classargparse.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,exit_on_error=True)
每个参数简单的描述如下所示:
prog
- 程序的名称
os.path.basename(sys.argv[0]))
usage
- 描述程序用途的字符串
description
- 在参数帮助文档之前显示的文本
epilog
- 在参数帮助文档之后显示的文本
parents
- 一个 ArgumentParser 对象的列表,它们的参数也应包含在内formatter_class
- 用于自定义帮助文档输出格式的类prefix_chars
- 可选参数的前缀字符集合
'-'
fromfile_prefix_chars
- 当需要从文件中读取其他参数时,用于标识文件名的前缀字符集合
argument_default
- 参数的全局默认值
conflict_handler
- 解决冲突选项的策略
add_help
- 为解析器添加一个 -h/–help 选项
allow_abbrev
- 如果缩写是无歧义的,则允许缩写长选项
exit_on_error
- 决定当错误发生时是否让 ArgumentParser
附带错误信息退出
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()
所返回对象上的属性名ArgumentParser.parse_args(args=None, namespace=None)
将参数字符串转换为对象并将其设为命名空间的属性,返回带有成员的命名空间
args
- 要解析的字符串列表
sys.argv
获取namespace
- 用于获取属性的对象
Namespace
对象使用 argparse
的第一步是创建一个 ArgumentParser
对象:
parser = argparse.ArgumentParser(description='Process some integers.')
ArgumentParser
对象包含将命令行解析成 Python 数据类型所需的全部信息
description
ArgumentParser
构造方法的调用都会使用 description= 关键字参数
给一个 ArgumentParser
添加程序参数信息是通过调用 add_argument()
方法完成的
ArgumentParser
如何获取命令行字符串并将其转换为对象parse_args()
调用时被存储和使用parser.add_argument('--input_path',default="input", type=str,help ='input files')
parser.add_argument('--output_path',default = "output", type=str,help='result dir.')
这些调用指定 ArgumentParser
如何获取命令行字符串并将其转换为对象
ArgumentParser
通过 parse_args()
方法解析参数
args = parser.parse_args()
print (args.echo)
在脚本中,通常 parse_args()
会被不带参数调用,而 ArgumentParser
将自动从 sys.argv
中确定命令行参数
以下代码是一个 Python 程序,它获取一个整数列表并计算总和或者最大值:
import argparse
parser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument('integers', metavar='N', type=int, nargs='+',
help='an integer for the accumulator')
parser.add_argument('--sum', dest='accumulate', action='store_const',
const=sum, default=max,
help='sum the integers (default: find the max)')
args = parser.parse_args()
print(args.accumulate(args.integers))
当使用适当的参数运行时,它会输出命令行传入整数的总和或者最大值:
python prog.py -h
python prog.py 1 2 3 4 --sum
一份简单的使用说明