使用argparse解析值的最常见方法



在使用argparse时,这是我第一次遇到"Namespace"对象。使用这些对象最常见的方法是什么?例如,如果我有这个初始化代码:

import argparse
parser = argparse.ArgumentParser(description='Dedupe library.', allow_abbrev=True)
parser.add_argument( '-a', '--all', nargs='+', type=int, help='(Optional) Enter one or more IDs.')
parser.add_argument( '-r', '--reverse', nargs='+', help='(Optional) Enter one or more IDs.')

库似乎在每个--long选项上都添加了一个属性(如果存在,则为短-s选项(,因此如下所示:

# test.py
p = parser.parse_args()
print (p.all, p.reverse)
# -------------------------------------
$ python test.py -a 2 3 -r asdf
# [2, 3] ['asdf']

这是处理argparse输出的最常见方法吗?或者通常是如何做到的?

每个参数都执行某种操作,由action参数到add_argument参数指定。默认为store操作。

每个store操作都会将一个(或多个(值保存到生成的命名空间中的属性中。您可以使用dest参数指定add_argument的哪个属性,但更常见的是,该名称是从第一个长选项名称推断出来的(如果没有长名称,则从第一个短名称推断出来(。

请注意,可以有多个影响同一属性的选项。常见的用途是具有多个store_const操作,这些操作将不同的硬编码值保存到单个属性。

p.add_argument("--high", action='store_const', dest='level', const='high')
p.add_argument("--med", action='store_const', dest='level', const='medium')
p.add_argument("--low", action='store_const', dest='level', const='low')

您可以将其视为为为一个选项提供一系列别名,该选项使用显式参数来指定级别:

p.add_argument("--level", choices=['high', 'medium', low'])

其中CCD_ 12具有与CCD_ 13相同的效果。

>>> p.parse_args(["--level", "high"]).level
'high'
>>> p.parse_args(["--high"]).level
'high'

最新更新