在使用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'