我试图通过使用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。
答案 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