Can argparse accept argument value as key=val pairs

后端 未结 2 1070
伪装坚强ぢ
伪装坚强ぢ 2020-12-21 12:06

I am trying to implement below option by using argparse(can\'t use any other tool like docopt because of project requirement):-

cli.py --conf key1=value1, k         


        
相关标签:
2条回答
  • 2020-12-21 12:52

    I would use type=str and parse it later, perhaps with json, but the main problem with that would be the way you are writing your command:

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

    The spaces split each pair to a different argument. If you use either method you suggested it would not work. Instead make sure that they are all one argument:

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

    That way this large argument is ready to be parsed as json

    0 讨论(0)
  • 2020-12-21 12:55

    Since you commented that you must use the cli as it is written, This is another solution. In argparse i would define the conf argument like this:

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

    With nargs='*' all the arguments following that would be in the same list which looks like this ['key1=value1', 'key2=value2', 'key3=value3']

    To parse that list and get a dict out of it, you can do this:

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

    Now call your program like this (without commas):

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

    And it should work

    0 讨论(0)
提交回复
热议问题