>>> parser.parse_args(['--version'])
PROG 2.0
+* ``'extend'`` - This stores a list, and extends each argument value to the
+ list.
+ Example usage::
+
+ >>> parser = argparse.ArgumentParser()
+ >>> parser.add_argument("--foo", action="extend", nargs="+", type=str)
+ >>> parser.parse_args(["--foo", "f1", "--foo", "f2", "f3", "f4"])
+ Namespace(foo=['f1', 'f2', 'f3', 'f4'])
+
You may also specify an arbitrary action by passing an Action subclass or
other object that implements the same interface. The recommended way to do
this is to extend :class:`Action`, overriding the ``__call__`` method
vars(namespace).setdefault(_UNRECOGNIZED_ARGS_ATTR, [])
getattr(namespace, _UNRECOGNIZED_ARGS_ATTR).extend(arg_strings)
+class _ExtendAction(_AppendAction):
+ def __call__(self, parser, namespace, values, option_string=None):
+ items = getattr(namespace, self.dest, None)
+ items = _copy_items(items)
+ items.extend(values)
+ setattr(namespace, self.dest, items)
# ==============
# Type classes
self.register('action', 'help', _HelpAction)
self.register('action', 'version', _VersionAction)
self.register('action', 'parsers', _SubParsersAction)
+ self.register('action', 'extend', _ExtendAction)
# raise an exception if the conflict handler is invalid
self._get_handler()
self.assertEqual(parser.parse_args(['42']), NS(badger='foo[42]'))
+class TestActionExtend(ParserTestCase):
+ argument_signatures = [
+ Sig('--foo', action="extend", nargs="+", type=str),
+ ]
+ failures = ()
+ successes = [
+ ('--foo f1 --foo f2 f3 f4', NS(foo=['f1', 'f2', 'f3', 'f4'])),
+ ]
+
# ================
# Subparsers tests
# ================
--- /dev/null
+Add an extend action to argparser.