Parser 使用方法


前言

本文主要记录了在深度学习中,使用别人写的代码时,用来接收用户在命令行里指定传入模型参数的重要方法 parser

同时,本文也给出了简易的示例,方便读者快速开始(只想了解如何使用的话可以直接跳到 3. 使用方法4. 示例


1. 基本概念

argparse 模块可以让人轻松编写用户友好的命令行接口

  • 程序定义它需要的参数,然后 argparse 将弄清如何从 sys.argv 解析出那些参数
  • argparse 模块还会自动生成帮助和使用手册,并在用户给程序传入无效参数时报出错误信息

argparsepython 用于解析命令行参数和选项的标准模块,用于代替已经过时的 optparse 模块


2. 重要概念

2.1. ArgumentParser

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 - 当需要从文件中读取其他参数时,用于标识文件名的前缀字符集合
    • 默认值:None
  • argument_default - 参数的全局默认值
    • 默认值:None
  • conflict_handler - 解决冲突选项的策略
    • 通常是不必要的
  • add_help - 为解析器添加一个 -h/–help 选项
    • 默认值:True
  • allow_abbrev - 如果缩写是无歧义的,则允许缩写长选项
    • 默认值:True
  • exit_on_error - 决定当错误发生时是否让 ArgumentParser 附带错误信息退出
    • 默认值:True

2.2. 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 - 被一些 actionnargs 选择所需求的常数
  • default - 当参数未在命令行中出现并且也不存在于命名空间对象时所产生的值
  • type - 命令行参数应当被转换成的类型
  • choices - 一个参数的可允许值的序列
  • required - 此命令行选项是否可省略
  • help - 一个此选项作用的简单描述
  • metavar - 在使用方法消息中使用的参数值示例
  • dest - 被添加到 parse_args() 所返回对象上的属性名

2.3. parse_args()

ArgumentParser.parse_args(args=None, namespace=None)

将参数字符串转换为对象并将其设为命名空间的属性,返回带有成员的命名空间

  • args - 要解析的字符串列表
    • 默认值是从 sys.argv 获取
  • namespace - 用于获取属性的对象
    • 默认值是一个新的空 Namespace 对象

3. 使用方法

3.1. 创建一个解析器 argparse.ArgumentParser()

使用 argparse 的第一步是创建一个 ArgumentParser 对象:

parser = argparse.ArgumentParser(description='Process some integers.')

ArgumentParser 对象包含将命令行解析成 Python 数据类型所需的全部信息

  • description
    • 大多数对 ArgumentParser 构造方法的调用都会使用 description= 关键字参数
    • 这个参数简要描述这个程度做什么以及怎么做
    • 在帮助消息中,这个描述会显示在命令行用法字符串和各种参数的帮助消息之间

3.2. 添加参数 parser.add_argument()

给一个 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 如何获取命令行字符串并将其转换为对象

  • 设置 python 文件的 input_path,默认为该目录下的 input 文件夹
  • 设置 python 文件的 output_path,默认为该目录下的 output 文件夹

3.3. 解析参数 parser.parse_args()

ArgumentParser 通过 parse_args() 方法解析参数

  • 它将检查命令行,把每个参数转换为适当的类型然后调用相应的操作
  • 在大多数情况下,这意味着一个简单的 Namespace 对象将从命令行解析出的属性构建
args = parser.parse_args()
print (args.echo)

在脚本中,通常 parse_args() 会被不带参数调用,而 ArgumentParser 将自动从 sys.argv 中确定命令行参数


4. 示例

以下代码是一个 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

总结

一份简单的使用说明

参考文档
参考博客

猜你喜欢

转载自blog.csdn.net/HoraceYan/article/details/130456120