【问题标题】:Can argparse accept argument value as key=val pairsargparse 可以接受参数值作为 key=val 对
【发布时间】:2017-12-14 23:26:59
【问题描述】:

我正在尝试通过使用 argparse 来实现以下选项(由于项目要求,不能使用任何其他工具,如 docopt):-

cli.py --conf key1=value1, key2=value2, kay3=value3
or
cli.py --conf key1=value1 key2=value2 key3=value3

到目前为止,我已经尝试过 type=json.loads 或 dict 但没有帮助。 一种可能的解决方案是使用type=str,然后将其解析为dict。 你们知道我缺少的其他更好的解决方案吗? 提前致谢。

注意 - 不能使用 --key1=value1 --key2=value2 --key3=value3 因为我不想限制键/值的计数和名称。它将有助于在未来支持新的 key/val。

【问题讨论】:

  • 为什么不对key1key2 等使用多个参数?
  • 你不是要求这个吗,Using argparse to parse arguments of form “arg= val”。这似乎对您有帮助。
  • 你有固定数量的键值对吗?如果是这样,正如@OferSadan 提到的,你可以像这样传递它们--key1=value1 --key2=value2 --key3=value3
  • 1.还会有其他参数,不想提供选项以将 key1 和 key2 与任何其他参数 2 一起使用。不想限制键/值对的计数和名称,如果需要支持新的键/值,则否参数解析器需要更改
  • @AlokThakur 请在您的问题中提及这两个假设以避免重复。

标签: python python-2.7 argparse


【解决方案1】:

由于您评论说您必须使用编写的 cli,这是另一种解决方案。在argparse 中,我会像这样定义conf 参数:

parser.add_argument('--conf', nargs='*')

nargs='*' 后面的所有参数都将在同一个列表中,看起来像这样 ['key1=value1', 'key2=value2', 'key3=value3']

要解析该列表并从中获取字典,您可以这样做:

parsed_conf = {}
for pair in conf:
    kay, value = pair.split('=')
    parsed_conf[key] = value

现在这样调用你的程序(不带逗号):

cli.py --conf key1=value1 key2=value2 key3=value3

它应该可以工作

【讨论】:

    【解决方案2】:

    我会使用 type=str 并稍后解析它,也许使用 json,但主要问题是您编写命令的方式:

    cli.py --conf key1=value1, key2=value2, kay3=value3
    

    空格将每一对分成不同的参数。如果您使用您建议的任何一种方法,它都行不通。相反,请确保它们都是一个论点:

    cli.py --conf="key1='value1', key2='value2', kay3='value3'"
    

    这样这个大参数就可以被解析为json了

    【讨论】:

    • 感谢您的建议,我觉得应该有办法提及--conf 参数可以取多个值。我用过支持这个的cli。
    • 有,我发布了另一个答案来解决这个问题
    猜你喜欢
    • 1970-01-01
    • 2013-03-31
    • 2022-06-11
    • 2017-12-22
    • 2020-08-08
    • 2021-07-15
    • 1970-01-01
    • 2019-10-20
    相关资源
    最近更新 更多