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, key2=value2, kay3=value3
or
cli.py --conf key1=value1 key2=value2 key3=value3
So far I have tried type=json.loads
or dict but not helping.
One possible solution is to use type=str
and then later parse it to dict
.
Do you guys know any other better solution which I am missing..
Thanks in advance.
Note- Can't use --key1=value1 --key2=value2 --key3=value3 because I don't want to restrict count and name of key/value. It will help in supporting new key/val in future.
Since you commented that you must use the cli as it is written, This is another solution. In
argparse
i would define theconf
argument like this: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:
Now call your program like this (without commas):
And it should work
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: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:
That way this large argument is ready to be parsed as json