与自定义操作一起使用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)
来解决此问题。