diff -r 8a364deb0225 Lib/argparse.py --- a/Lib/argparse.py Thu May 02 10:44:04 2013 -0700 +++ b/Lib/argparse.py Wed May 08 15:15:30 2013 -0700 @@ -136,6 +136,12 @@ setattr(namespace, name, value) return getattr(namespace, name) +def is_mnrep(nargs): + # re like string, {n,m} + try: + return _re.match('({\d?,?\d?}.?)',nargs) is not None + except TypeError: + return False # =============== # Formatting Help @@ -581,6 +587,8 @@ result = '...' elif action.nargs == PARSER: result = '%s ...' % get_metavar(1) + elif is_mnrep(action.nargs): + result = '%s%s' % (get_metavar(1)[0], action.nargs) else: formats = ['%s' for _ in range(action.nargs)] result = ' '.join(formats) % get_metavar(action.nargs) @@ -2195,6 +2203,10 @@ elif nargs == PARSER: nargs_pattern = '(-*A[-AO]*)' + # n to m arguments, nargs is re like {n,m} + elif is_mnrep(nargs): + nargs_pattern = '([-A]%s)'%nargs + # all others should be integers else: nargs_pattern = '(-*%s-*)' % '-*'.join('A' * nargs)