argparse 中 add_argument()、parse_args() 参数解析及用法

在 python 编写的程序中,我们经常会看到一片的 argparse 相关代码,而它究竟怎么使用呢?接下来,我们将以例子详细学习它。


argparse是什么?

  • argparse 是一个__命令行参数解析__模块。
  • 可以轻松编写用户友好的命令行接口,在程序中定义需要的参数,然后 argparse 将弄清如何从 sys.argv 解析出那些参数。
  • argparse 还会自动生成帮助和使用手册,并在用户传入无效参数时报出错误信息。

1. 创建一个解析器

import argparse
# 创建一个ArgumentParser的对象,此对象包含将命令行参数解析为 python 数据类型所需的全部信息。
parser = argparse.ArgumentParser(description='Process some integers.')

2. 添加参数

创建完解析器后,如何向其中加入参数信息呢?

调用add_argument()函数完成,这些调用指定 ArgumentParser 如何获取命令行字符串并将其转换为对象。

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)')

3. 解析参数

args = parser.parse_args()

4. 执行并输出

print(args.accumulate(args.integers))

将以上代码全部写入文件test.py中,测试执行:

python test.py 8 2 4 1 
pyhton test.py 8 2 4 1 --sum

第一个执行输出结果为:8,默认取最大值。第二次执行结果为:15,指定求和。


看完上面例子,下面详细介绍各个参数的意义:

1. 解析器对象

先来看看其参数有哪些以及其默认值:

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 对象的列表,继承父解析器的参数( 大多数父解析器会指定 add_help=False )
  • formatter_class - 可用于自定义帮助文档输出格式
  • prefix_chars - 参数的前缀
  • fromfile_prefix_chars - 从文件中读取参数的前缀
  • argument_default - 参数全局默认值
  • conflict_handler - 解决冲突的策略
  • add_help - 为解析器添加一个 -h/--help 选项
  • allow_abbrev - 是否允许识别缩写

2. add_argument()

其参数如下(‘[ ]’ 表示可选参数):

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

接下来,我们依次查看每个参数的作用:

1)name or flags:一个命名或者一个选项字符串的列表,例如 - ‘echo’ 为一个命名,‘-f’ 或 ‘-foo’ 为一个选项。

parser.add_argument('-f', '--foo') # 选项参数
parser.add_argument('bar') # 位置参数

2)action: 当参数在命令行中出现时使用的动作基本类型,其选项包含:

  • store - 存储参数的值,为默认选项

  • store_const - 存储被 const 命名参数指定的值, 通常用在选项中来指定一些标志
    parser.add_argument('--foo', action='store_const', const=42)

  • store_true / store_false - store_const 分别用作存储 True 和 False 值的特殊用例,其默认值为 False / True
    parser.add_argument('--foo', action='store_true')

  • append - 存储一个列表,并且将每个参数值追加到列表中。在允许多次使用选项时很有用

  • append_const - 将 const 命名参数指定的值追加到列表中

  • count - 计算一个关键字参数出现的数目或次数

parser.add_argument('--verbose', '-v', action='count', default=0)
parser.parse_args(['-vvv']) # Namespace(verbose=3)
  • help - 打印所有当前解析器中的选项和参数的完整帮助信息

  • version - 打印版本信息

    parser.add_argument('--version', action='version', version='%(prog)s 2.0')

  • extend - 存储一个列表,将每个参数值扩展至该列表

    parser.add_argument("--foo", action="extend", nargs="+", type=str)
    parser.parse_args(["--foo", "f1", "--foo", "f2", "f3", "f4"]) 
    # Namespace(foo=['f1', 'f2', 'f3', 'f4'])
    

3)nargs:读取的命令行参数个数, 支持的值有:

  • N - 具体数值
  • ‘ ? ’ - 若无命令行参数,使用 default;若选项字符串出现但没有跟随命令行参数产生 const 值
  • ‘ * ’ - 表示 0 或多个参数
  • ‘ + ’ - 表示 1 或多个参数

4)default:默认值设置

5)type:参数类型,默认为字符串类型。还包括 float、int 等类型

6)choices:参数可允许的值的一个容器,使用之外的值会报错

  • parser.add_argument('move', choices=['rock', 'paper', 'scissors'])

7)required:可选参数是否可以省略

  • parser.add_argument('--foo', required=True) # 不可省略

8)help: 参数的帮助信息

9)metavar: 在 usage 说明中的参数名称

10)dest: 解析后的参数名称,默认情况下,对于可选参数选取最长的名称,中划线转换为下划线

3. parse_args()

parse_args(args=None, nampespace=None)

args - 参数名称,namespace - 赋值

对 add_argument() 中定义的参数进行赋值。

>>> 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)

参考文档:
https://docs.python.org/zh-cn/3/library/argparse.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值