Issue 31360: argparse mutually_exclusive_group under add_argument_group fails if part of parent_processor (original) (raw)

Hopefully I'm not being obtuse, but I seem to be getting incorrect/unexpected help output when using mutually_exclusive_group under an add_argument_group if this layering is happening in a parent parser.

Here's an example of the triggering usage:

import argparse

global_options = argparse.ArgumentParser(add_help=False) global_options.add_argument('--summary', action='store_true', help='summarize information') global_options.add_argument('--verbose', action='store_true', help='tell us more')

output_format = global_options.add_argument_group("Output format", "ways to foo") styles = output_format.add_mutually_exclusive_group() styles.add_argument('--plain', dest='style') styles.add_argument('--green', dest='style') styles.add_argument('--blue', dest='style')

parser = argparse.ArgumentParser() commands = parser.add_subparsers() hit = commands.add_parser('hit', parents=[global_options]) miss = commands.add_parser('miss', parents=[global_options])

print(parser.parse_args(['hit', '-h']))

which produces:

usage: bar.py hit [-h] [--summary] [--verbose] [--plain STYLE | --green STYLE | --blue STYLE]

optional arguments: -h, --help show this help message and exit --summary summarize information --verbose tell us more --plain STYLE --green STYLE --blue STYLE

Output format: ways to foo

"--plain" "--green" and "--blue" should be under "Output format"