argparse.ArgumentParser()相关介绍

argparse — 命令行选项、参数和子命令解析器

该模块封装在argparse模块中,使用前须使用import argparse载入库。它将参数与代码分离开使代码更简洁,还会自动生成帮助手册与使用文档,用户给程序传入无效参数时会返回错误信息。
具体举例如下:

import argparse

def parse_args():
    parser = 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, exit_on_error=True)    
    #创建解析器 
    parser.add_argument("--model_file")
    parser.add_argument("--data_file", default="./BraTS2020_Validation_data.h5")
    parser.add_argument("--labels", nargs="*")
    parser.add_argument("--modalities", nargs="*")
    parser.add_argument("--validation_file", default="./BraTS2020_Validation_ids.pkl")
    parser.add_argument("--no_label_map", action="store_true", default=False)
    parser.add_argument("--prediction_dir", default="./BraTS2020_Validation_predictions")
    parser.add_argument("--output_basename", default="{subject}.nii.gz")
    #添加解析器属性
    return parser.parse_args()
    #对解析器进行解析

解析器的属性参数

prog - 指定解释器名称 (default: os.path.basename(sys.argv[0]))默认为文件名,argv是sys模块的一个全局变量,也称sys模块的一个属性。argv本身为一个list类型的对象,该对象持有的第1个元素是命令行中传入的模块名(文件名.py)、从第2个元素(含)开始,均为命令行中传入的参数;
usage - 描述程序用途的字符串,可由用户赋值(默认值:由添加到解析器的参数生成);
description - 在参数帮助文档之前显示的文本,简要描述这个程序做什么以及怎么做, 在帮助消息中,这个描述会显示在命令行用法字符串usage和各种参数的帮助消息之间:(默认值:无);
epilog - 在参数帮助文档之后显示的文本(默认值:无);
parents - 一个 ArgumentParser 对象的列表,它们的参数也应包含在内,可以用于解释器参数调用parents= 参数使用 ArgumentParser 对象的列表即一个解释器调用另一个解释器中的所有的位置和可选的行为,然后将这写行为加到正在构建的解释器中,在parents= 传递时要完全初始化,将父类add_help = False在子解释器之后改变父解释器不会改变子解释器;
formatter_class - 用于自定义帮助文档输出格式的类,有以下四类:

  1. formatter_class=argparse.RawDescriptionHelpFormatter:表示descriptionepilog 已经被正确的格式化了,不能在命令行中被自动换行,照着给定值输出;
  2. formatter_class=argparse.RawTextHelpFormatter:保留所有种类文字的空格,包括参数的描述。然而,多重的空白行会被替换成一行。如果你想保留多重的空白行,可以在空白行之间加空格;
  3. formatter_class=argparse.ArgumentDefaultsHelpFormatter:自动添加默认的值的信息到每一个帮助信息的参数中;eg:实例代码中--data_file会在帮助中显示(default: ./BraTS2020_Validation_data.h5)
  4. formatter_class=argparse.MetavarTypeHelpFormatter:在帮助显示时,每一个参数中使用 type 的参数名当作它的显示名;

prefix_chars - 可选参数的前缀字符集合(默认值: ‘-’)可更改为’±’等包含一个即可;
fromfile_prefix_chars - 当需要从文件中读取其他参数时,用于标识文件名的前缀字符集合(默认值: None);
argument_default - 参数的全局默认值(默认值: None);
conflict_handler - 解决冲突选项的策略(通常是不必要的),不能设置相同的参数;
add_help - 为解析器添加一个 -h/–help 选项(默认值: True);

options:
 -h, --help  show this help message and exit
 --foo FOO   foo help
#如果add_help = False,会缺失一行描述信息
options:
 --foo FOO  foo help

allow_abbrev - 如果缩写是无歧义的只有一种(eg:在使用解释器时参数foobar与foonley,不可用foo来指代,会产生歧义),则允许缩写长选项 (默认值:True);
exit_on_error - 决定当错误发生时是否让 ArgumentParser 附带错误信息退出。 (默认值: True),如果用户想要手动捕获错误,可通过将 exit_on_error设为False 来启用该特性;
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
通过parser.add_argument()添加相关参数信息

`parser.add_argument(name or flags...[, action][, nargs][, const][, default][, type][, choices][, required][, help][, metavar][, dest])`

add_argument增加参数并设置参数属性


注:命令行指parser.parse_args()


name or flags - 一个命名或者一个选项字符串的列表,例如 --model_fiel或-m表示同一个参数;

import argrase

def parse_args():
	parser = argparse.ArgumentParser()
    parser.add_argument('-m',"--model_file")
    return parser.parse_args()

action - 当参数在命令行中出现时使用的动作基本类型包括以下分类情况:

  • action = store_const:动作通常用在选项中来指定一些标志;
  • action = store_true / store_false:只要该参数出现就变为True/False,默认值为Flalse/True;
  • action = append/extend : 存储一个列表,并且将每个参数值都追加到列表中;
  • action = append_const :存储一个列表,并将 const 命名参数指定的值追加到列表中;
  • action = count :计算一个关键字参数出现的数目或次数;默认值为空,可以设为0;
  • action = help :打印当前解析器中的选项和参数的完整帮助信息然后退出,一个help动作会被自动加入解析器;
  • action = version :需要在该参数属性中添加version=命名参数+版本信息,打印版本信息并在调用后退出;
  • action = argparse.BooleanOptionalAction:通过传递一个 Action 子类或实现相同接口的其他对象来指定任意操作,该操作会添加对布尔类型的操作;
import argparse

parser = argparse.ArgumentParser()
parser.add_argument('--foo', action=argparse.BooleanOptionalAction)
parser.parse_args(['--no-foo'])
#Namespace(foo=False)
  • 自定义动作,重载 call 方法以及可选的 init 和 format_usage 方法

nargs - 命令行参数应当消耗的数目,nargs 的赋值使参数关联不同数目的命令行参数到该参数的单一动作,具体可以取以下值:

  • ‘N’(int):命令行中的N个参数会被汇集到一个列表中;
  • ‘?’:命令行参数中同一参数(add_argument所增加的)可设置一个或零个,从命令行中消耗一个参数产生一个单一项,如果没有命令行参数,会产生default值,选项字符串出现但并未跟随命令行参数会产生const值,一个更普遍的用法是允许可选的输入输出文件;
import argparse

parser = argparse.ArgumentParser()
parser.add_argument('--foo', nargs='?', const='c', default='d')
parser.add_argument('bar', nargs='?', default='d')
parser.parse_args(['XX', '--foo', 'YY'])
#Namespace(bar='XX', foo='YY')
parser.parse_args(['XX', '--foo'])
#Namespace(bar='XX', foo='c')
parser.parse_args([])
#Namespace(bar='d', foo='d')


##################读入读出文件###############################


parser = argparse.ArgumentParser()
parser.add_argument('infile', nargs='?', type=argparse.FileType('r'),
                    default=sys.stdin)
parser.add_argument('outfile', nargs='?', type=argparse.FileType('w'),
                    default=sys.stdout)
parser.parse_args(['input.txt', 'output.txt'])
#Namespace(infile=<_io.TextIOWrapper name='input.txt' encoding='UTF-8'>,     #_io.TextIOWrapper是文件输入输出包,UTF-8是一种变长字节编码方式
#          outfile=<_io.TextIOWrapper name='output.txt' encoding='UTF-8'>)
parser.parse_args([])
#Namespace(infile=<_io.TextIOWrapper name='<stdin>' encoding='UTF-8'>,
#          outfile=<_io.TextIOWrapper name='<stdout>' encoding='UTF-8'>)
  • ‘*’:命令行参数中同一参数(add_argument所增加的)可设置零个或多个;
  • ‘+’:命令行参数中同一参数(add_argument所增加的)可设置一个或多个,二者下限不同;
  • 如果不设置args值意味着单一参数消耗单一命令行参数;

const - 用于保存不从命令行中读取但被一些 action 和 nargs 选择所需求的常数;
default - 当参数未在命令行中出现并且也不存在于命名空间对象时所使用的值;
type - 默认情况下,解析器会将命令行参数当作简单字符串读入,type 关键字允许执行任何必要的类型检查和类型转换,把命令行参数转换成需要的类型,可以使用自定义数据类型转换函数;
choices - 某些命令行参数应当从一组受限值中选择,当执行命令行解析时,参数值将被检查,如果参数不是可接受的值之一就将显示错误消息,实则为一可用的参数容器存放可选命令行参数(可存放任意容器列表、字典等);
required - 此命令行选项是否可省略,当required=True时,命令行参数必须包含该参数(add_argument所增加的),否则可以选择不赋值;
help - 该参数(add_argument所增加的)作用的简单描述和帮助信息;
metavar - 在使用方法消息中使用的参数值示例;
dest - 被添加到 parse_args() 所返回对象上的属性名, 默认情况下,对于位置参数动作(命令行中必写参数),dest 值将被直接使用,而对于可选参数,dest 值将被转为大写形式;

parser = argparse.ArgumentParser()
parser.add_argument('--foo')
parser.add_argument('bar')
parser.parse_args('X --foo Y'.split())
#Namespace(bar='X', foo='Y')
parser.print_help()
#usage:  [-h] [--foo FOO] bar   #bar为位置参数,--foo为可选参数

#positional arguments:          #位置参数
# bar

#options:						#可选参数
# -h, --help  show this help message and exit
# --foo FOO


------------------------------------------------------------------------------------------------------
#metavar 仅改变 显示的 名称  parse_args() 对象的属性名称仍然会由 dest 值确定

parser = argparse.ArgumentParser()
parser.add_argument('--foo', metavar='YYY')
parser.add_argument('bar', metavar='XXX')
parser.parse_args('X --foo Y'.split())
#Namespace(bar='X', foo='Y')
parser.print_help()
#usage:  [-h] [--foo YYY] XXX

#positional arguments:
# XXX

#options:
# -h, --help  show this help message and exit
# --foo YYY


-------------------------------------------------------------------------------------------------
#不同的 nargs 值可能导致 metavar 被多次使用。 提供一个元组给 metavar 即为每个参数指定不同的显示信息

parser = argparse.ArgumentParser(prog='PROG')
parser.add_argument('-x', nargs=2)
parser.add_argument('--foo', nargs=2, metavar=('bar', 'baz'))
parser.print_help()
#usage: PROG [-h] [-x X X] [--foo bar baz]

#options:
# -h, --help     show this help message and exit
# -x X X
# --foo bar baz


----------------------------------------------------------------------------------------------------
#dest 允许提供自定义属性名称

parser = argparse.ArgumentParser()
parser.add_argument('--foo', dest='bar')
parser.parse_args('--foo XXX'.split())
#Namespace(bar='XXX')

命令行parser.parse_args() 进行解析

ArgumentParser.parse_args(args=None, namespace=None) 将参数字符串转换为对象并将其设为命名空间的属性,返回一个带有参数属性的命名空间。

  • args - 要解析的字符串列表, 默认值是从 sys.argv 获取,argv是sys模块的一个全局变量,也称sys模块的一个属性。argv本身为一个list类型的对象,该对象持有的第1个元素是命令行中传入的模块名(文件名.py)、从第2个元素(含)开始,均为命令行中传入的参数;
  • namespace - 用于获取属性的对象,默认值是一个新的空 Namespace 对象;
  • 选项值语法:
#选项和它的值是作为两个单独参数传入的
parser = argparse.ArgumentParser(prog='PROG')
parser.add_argument('-x')
parser.add_argument('--foo')
parser.parse_args(['-x', 'X'])
#Namespace(foo=None, x='X')
parser.parse_args(['--foo', 'FOO'])
#Namespace(foo='FOO', x=None)

----------------------------------------------------
#对于长选项(名称长度超过一个字符的选项),选项和值也可以作为单个命令行参数传入,使用 = 分隔它们即可

parser.parse_args(['--foo=FOO'])
#Namespace(foo='FOO', x=None)

------------------------------------------------
#对于短选项(长度只有一个字符的选项),选项和它的值可以拼接在一起

parser.parse_args(['-xX'])
#Namespace(foo=None, x='X')

------------------------------------------------
#有些短选项可以使用单个 - 前缀来进行合并,如果仅有最后一个选项(或没有任何选项)需要值的话

parser = argparse.ArgumentParser(prog='PROG')
parser.add_argument('-x', action='store_true')
parser.add_argument('-y', action='store_true')
parser.add_argument('-z')
parser.parse_args(['-xyzZ'])
#Namespace(x=True, y=True, z='Z')
  • 无效参数:解析命令时,parse_args()会检测错误,包括有歧义的选项、无效的类型、无效的选项、错误的位置参数个数等等。 当遇到这种错误时,它将退出并打印出错误文本同时附带用法消息;
  • 包含‘-’的参数:如果有‘–’,表示是可选参数,没有‘–’的话,意味着是必选参数,在运行时必须输入;
  • 命名空间对象argparse.Namespace:创建一个存放属性的对象并将其返回;

记录学习:有不对的地方欢迎指出,共同进步!
学习网址(如有侵权,请联系本人删除)

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值