【问题标题】:python argparse: how to access argumentspython argparse:如何访问参数
【发布时间】:2018-12-12 15:37:47
【问题描述】:

似乎这个问题以前经常被问到,但我还是找不到正确的答案。所以又来了……

示例代码:一个可选参数,参数转换为字典。

import argparse

epilog = '''usage example:'''

parser = argparse.ArgumentParser(description="add watchit hosts", epilog=epilog)
parser.add_argument('--add', nargs='*', default="-1", metavar="key 'value'")
args = vars(parser.parse_args())
print args
print args['name']

python argparse_test.py --add name 'aixbuildhost' 吐出以下内容:

{'add': ['name', 'aixbuildhost']}
Traceback (most recent call last):
  File "argparse_test.py", line 9, in <module>
    print args['name']
KeyError: 'name'

所以最大的问题是,我如何获得“名字”?

【问题讨论】:

  • 使用args['add'][1]
  • 在学习argparse 或使用它进行几乎任何调试时,最好先查看args 而无需进一步处理print(args)。这将向您显示值及其名称。

标签: python argparse


【解决方案1】:

键是'add',值是一个包含两个参数的列表——nameaixbuildhost。要访问这些值:

args['add'][0] - 将返回'name'

args['add'][1] - 将返回'aixbuildhost'

详细了解如何使用和解析字典here

【讨论】:

  • hmm..这有点令人不快,没有办法像“args['add'][name]”那样访问它而不是使用索引?名称更一致,以防有人弄乱了参数顺序。
  • 为什么不直接使用--name 而不是--add?这样,即使不使用vars(),您也可以使用args.name 访问aixbuildhosts。以您现在的方式,在参数之后您再提供两个参数,因此使用了一个列表,没有索引值就无法访问它们。此外,如果他们弄乱了参数顺序,你只会返回一个错误并告诉他们,通过try/except 捕获这样的异常。如果args['add'][0] 的值不是'name',告诉他们他们搞砸了。
【解决方案2】:

或使用:

list(args.values())[0][0]

输出:

'name'

list(args.values())[0][1]

输出:

'aixbuildhost'

【讨论】:

    猜你喜欢
    • 2014-08-24
    • 1970-01-01
    • 1970-01-01
    • 2018-07-09
    • 2014-07-23
    • 2013-03-31
    • 2015-06-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多