可以将argparse接受参数值作为key = val对

时间:2017-07-11 04:27:40

标签: python python-2.7 argparse

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

this

到目前为止,我已尝试cli.py --conf key1=value1, key2=value2, kay3=value3 or cli.py --conf key1=value1 key2=value2 key3=value3 或dict但没有帮助。 一种可能的解决方案是使用type=json.loads,然后将其解析为type=str。 你们知道我缺少的任何其他更好的解决方案吗? 提前谢谢。

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

2 个答案:

答案 0 :(得分:3)

由于您评论说您必须在编写时使用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

它应该可行

答案 1 :(得分:1)

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

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

空格将每对分成不同的参数。如果你使用任何一种方法,你建议它不会起作用。而是确保它们都是一个参数:

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

这样就可以将这个大型参数解析为json