diff --git a/Lib/argparse.py b/Lib/argparse.py index 798766f6c4..96222f0d21 100644 --- a/Lib/argparse.py +++ b/Lib/argparse.py @@ -539,8 +539,7 @@ class HelpFormatter(object): def _format_action_invocation(self, action): if not action.option_strings: default = self._get_default_metavar_for_positional(action) - metavar, = self._metavar_formatter(action, default)(1) - return metavar + return ', '.join(self._metavar_formatter(action, default)(1)) else: parts = [] @@ -709,7 +708,10 @@ def _get_action_name(argument): elif argument.option_strings: return '/'.join(argument.option_strings) elif argument.metavar not in (None, SUPPRESS): - return argument.metavar + if isinstance(argument.metavar, tuple): + return '(%s)' % ', '.join(argument.metavar) + else: + return argument.metavar elif argument.dest not in (None, SUPPRESS): return argument.dest else: diff --git a/Lib/test/test_argparse.py b/Lib/test/test_argparse.py index c0c7cb0594..08833b9177 100644 --- a/Lib/test/test_argparse.py +++ b/Lib/test/test_argparse.py @@ -3967,6 +3967,28 @@ class TestHelpTupleMetavar(HelpTestCase): version = '' +class TestHelpTupleMetavarPositional(HelpTestCase): + """Test specifying metavar on a Positional as a tuple""" + + parser_signature = Sig(prog='PROG') + argument_signatures = [ + Sig('foo', help='foo help', nargs=2, metavar=('bar', 'baz')) + ] + argument_group_signatures = [] + usage = '''\ + usage: PROG [-h] bar baz + ''' + help = usage + '''\ + + positional arguments: + bar, baz foo help + + optional arguments: + -h, --help show this help message and exit + ''' + version = '' + + class TestHelpRawText(HelpTestCase): """Test the RawTextHelpFormatter"""