访问传递给argparser参数的选项?

af3*_*3ld 7 python argparse

是否有可能访问传递给参数的选择元组?如果是这样,我该怎么做呢

例如,如果我有

parser = argparse.ArgumentParser(description='choose location')
parser.add_argument(
    "--location",
    choices=('here', 'there', 'anywhere')
)
args = parser.parse_args()
Run Code Online (Sandbox Code Playgroud)

我可以访问元组('here', 'there', 'anywhere')吗?

mgi*_*son 7

事实证明,parser.add_argument实际上返回相关联Action.您可以选择以下选项:

>>> import argparse
>>> parser = argparse.ArgumentParser(description='choose location')
>>> action = parser.add_argument(
...     "--location",
...     choices=('here', 'there', 'anywhere')
... )
>>> action.choices
('here', 'there', 'anywhere')
Run Code Online (Sandbox Code Playgroud)

请注意,(AFAIK)此处未在任何地方记录,可能被视为"实施细节",因此如有更改,恕不另行通知等.

在添加之后,也没有任何可公开访问的方法来获取存储在a上的操作ArgumentParser.我相信它们是可用的,parser._actions就像你愿意对实现细节进行讨论(并假设涉及任何风险)......


您最好的选择是为位置选择创建一个常量,然后在代码中使用它:

LOCATION_CHOICES = ('here', 'there', 'anywhere')

parser = argparse.ArgumentParser(description='choose location')
parser.add_argument(
    "--location",
    choices=LOCATION_CHOICES
)
args = parser.parse_args()

# Use LOCATION_CHOICES down here...
Run Code Online (Sandbox Code Playgroud)