argparse.ArgumentParser()的用法解析
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])
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)
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 提供了非常简单易用的参数配置方法,提供在命令行程序中进行使用,而且在深度学习也被广泛的使用来构建参数。