python читает в нескольких значениях ключа (dict) из командной строки в переменную

В Perl можно легко прочитать несколько пар key=value в переменной ( a hash ), используя Getopt::Long (см. Здесь )

В основном это говорит

  GetOptions ("define=s" => \%defines); And on command line: <prog> --define os=linux --define vendor=redhat 

Я искал эквивалент в Python но пока не нашел. [ argparse ] не принимает словарь из bash shell, легко видит type = dict в argparse.add_argument () . Хотя я могу обойти это, прочитав аргументы и программно создав словарь из него, я просто хотел знать, как это сделать, как чистый, и простой способ (например, Perl)

Используйте argparse с настраиваемым действием:

 import argparse import copy class DictAction(argparse.Action): def __call__(self, parser, namespace, values, option_string=None): try: k, v = values.split("=", 1) except ValueError: raise argparse.ArgumentError(self, "Format must be key=value") # Implementation is from argparse._AppendAction items = copy.copy(argparse._ensure_value(namespace, self.dest, {})) # Default mutables, use copy! items[k] = v setattr(namespace, self.dest, items) # Usage: parser = argparse.ArgumentParser() parser.add_argument("--define", action=DictAction) print parser.parse_args("--define k=v --define x=y".split()) # Gives # Namespace(d={'x': 'y', 'k': 'v'}) print parser.parse_args("--define k=v --define x=y --define z".split()) # Gives # usage: args.py [-h] [--define D] # args.py: error: argument --define: Format must be key=value 

Обратите внимание, что это не будет поддерживать знак равенства внутри параметра, но вы можете расширить его на «тупой» k, v = values.split("=", 1) чтобы решить эту проблему.