argparse.ArgumentParser()的用法解析

argparse.ArgumentParser()的用法解析

文章目录

  • 前言
  • 一、创建解析器
  • 二、添加参数
  • 三、解析参数
    • ArgumentParser对象
    • add_argument()方法
    • 示例
    • 在深度学习中的示例
  • 总结


前言

argparse 是 python 的一个模块,用于处理命令行选项、参数和子命令解析器等相关内容。此模块可以让人快速编写用户友好的命令行接口内容。程序定义它需要的参数,随后 argparse 将弄清如何从 sys.argv 解析出那些参数。argparse 模块还会自动生成帮助和使用手册,并在用户给程序传入无效参数时报出错误信息。
官方的使用文档链接
主要有三个步骤:
1、创建 ArgumentParser() 对象
2、调用 add_argument() 方法添加参数
3、使用 parse_args() 解析添加的参数


一、创建解析器

parser = argparse.ArgumentParser(description='RouteNet script')

使用 argparse 的第一步是创建一个 ArgumentParser 对象。
ArgumentParser 对象包含将命令行解析成 python 数据类型所需的全部信息

二、添加参数

parser.add_argument('integers', metavar='N', type=int, nargs='+', help='an integer for the accumulator')

三、解析参数

>>> parser.parse_args(['--sum', '7', '-1', '42'])
Namespace(accumulate=<built-in function sum>, integers=[7, -1, 42])

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)

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 :命令行参数应当消耗的数目,nargs=‘*’表示参数可设置零个或多个,nargs=’+‘表示参数可设置一个或多个,nargs=’?'表示参数可设置零个或一个
const :被一些 action 和 nargs 选择所需求的常数
default :当参数未在命令行中出现时使用的值
type :命令行参数应该被转换成的类型
choices :可用的参数的容器
required :此命令行选项是否可省略(仅选项可用)
help :一个此选项作用的简单描述
metavar :在使用方法消息中使用的参数值实例
dest :被添加到parse_args()所返回对象上的属性名

示例

import argparse

if __name__ == '__main__':
    # 第1步:定义
    parser = argparse.ArgumentParser(
                          usage='这是一个测试usage.', 
                          description='这是一大段描述文本。',
                          add_help='这是帮忙')
    
    # 第2步:添加变量
    parser.add_argument('-nmap', type=str, help='扫描文件路径')
    parser.add_argument('-pocs', type=str, default='pocs.json', help='模板文件路径')
    parser.add_argument('-n', type=int, default=-1, help='行数')
    parser.add_argument('-o', type=str, default=-1, help='输出文件路径。')

    # 第3步:解析输入变量
    args = parser.parse_args()

    # 第4步:使用变量
    print(parser.prog)
    print(args.nmap)
    print(args.pocs)
    print(args.n)
    print(args.o)

在深度学习中的示例

def main():
    parser = argparse.ArgumentParser(description='RouteNet script')

    subparsers = parser.add_subparsers(help='sub-command help')

    parser_train = subparsers.add_parser('train', help='Train options')
    parser_train.add_argument('--hparams', type=str,
                        help='Comma separated list of "name=value" pairs.')
    parser_train.add_argument('--train', help='Train Tfrecords files',  type=str ,nargs='+')
    parser_train.add_argument('--evaluation', help='Evaluation Tfrecords files',  type=str ,nargs='+')
    parser_train.add_argument('--model_dir', help='Model directory',  type=str )
    parser_train.add_argument('--train_steps', help='Training steps',  type=int, default=100 )
    parser_train.add_argument('--eval_steps', help='Evaluation steps, defaul None= all',  type=int, default=None )
    parser_train.add_argument('--shuffle_buf',help = "Buffer size for samples shuffling", type=int, default=10000)
    parser_train.add_argument('--target',help = "Predicted variable", type=str, default='delay')
    parser_train.add_argument('--warm',help = "Warm start from", type=str, default=None)
    parser_train.set_defaults(func=train)
    args = parser.parse_args()

    return args.func(args)
 
    
if __name__ == '__main__':

    main()

相对于上一个示例,此示例中多了一个 add_subparsers(),argparse 使用add_subparsers()方法去创建子命令

总结

argparse.ArgumentParser 提供了非常简单易用的参数配置方法,提供在命令行程序中进行使用,而且在深度学习也被广泛的使用来构建参数。

你可能感兴趣的:(Python,python,深度学习)