The argparse docs refer to an example of how to add a mutually exclusive group to an argument group to add title/description to those arguments. However, when used in parents
to subparsers the mutually exclusive group is left out of the argument group help text description.
This snippet code:
<code>from argparse import ArgumentParser
parent_parser = ArgumentParser(add_help=False)
parent_parser.add_argument('--common')
parent_parser_group = parent_parser.add_argument_group('New Group', 'Description.')
parent_parser_group.add_argument('--non-mut')
meg = parent_parser_group.add_mutually_exclusive_group()
meg.add_argument('--mut1', dest='mut')
meg.add_argument('--mut2', dest='mut')
parser = ArgumentParser(description='The main parser.')
subparsers = parser.add_subparsers(dest='subcommand', required=True)
command1_parser = subparsers.add_parser('command1', parents=[parent_parser])
command1_parser.add_argument('--c1')
command2_parser = subparsers.add_parser('command2', parents=[parent_parser])
command2_parser.add_argument('--c2')
command1_parser.print_help()
</code>
<code>from argparse import ArgumentParser
parent_parser = ArgumentParser(add_help=False)
parent_parser.add_argument('--common')
parent_parser_group = parent_parser.add_argument_group('New Group', 'Description.')
parent_parser_group.add_argument('--non-mut')
meg = parent_parser_group.add_mutually_exclusive_group()
meg.add_argument('--mut1', dest='mut')
meg.add_argument('--mut2', dest='mut')
parser = ArgumentParser(description='The main parser.')
subparsers = parser.add_subparsers(dest='subcommand', required=True)
command1_parser = subparsers.add_parser('command1', parents=[parent_parser])
command1_parser.add_argument('--c1')
command2_parser = subparsers.add_parser('command2', parents=[parent_parser])
command2_parser.add_argument('--c2')
command1_parser.print_help()
</code>
from argparse import ArgumentParser
parent_parser = ArgumentParser(add_help=False)
parent_parser.add_argument('--common')
parent_parser_group = parent_parser.add_argument_group('New Group', 'Description.')
parent_parser_group.add_argument('--non-mut')
meg = parent_parser_group.add_mutually_exclusive_group()
meg.add_argument('--mut1', dest='mut')
meg.add_argument('--mut2', dest='mut')
parser = ArgumentParser(description='The main parser.')
subparsers = parser.add_subparsers(dest='subcommand', required=True)
command1_parser = subparsers.add_parser('command1', parents=[parent_parser])
command1_parser.add_argument('--c1')
command2_parser = subparsers.add_parser('command2', parents=[parent_parser])
command2_parser.add_argument('--c2')
command1_parser.print_help()
Prints out
<code>usage: argparse_debug.py command1 [-h] [--common COMMON] [--non-mut NON_MUT] [--mut1 MUT | --mut2 MUT] [--c1 C1]
options:
-h, --help show this help message and exit
--common COMMON
--mut1 MUT
--mut2 MUT
--c1 C1
New Group:
Description.
--non-mut NON_MUT
</code>
<code>usage: argparse_debug.py command1 [-h] [--common COMMON] [--non-mut NON_MUT] [--mut1 MUT | --mut2 MUT] [--c1 C1]
options:
-h, --help show this help message and exit
--common COMMON
--mut1 MUT
--mut2 MUT
--c1 C1
New Group:
Description.
--non-mut NON_MUT
</code>
usage: argparse_debug.py command1 [-h] [--common COMMON] [--non-mut NON_MUT] [--mut1 MUT | --mut2 MUT] [--c1 C1]
options:
-h, --help show this help message and exit
--common COMMON
--mut1 MUT
--mut2 MUT
--c1 C1
New Group:
Description.
--non-mut NON_MUT
But I was expecting
<code>usage: argparse_debug.py command1 [-h] [--common COMMON] [--non-mut NON_MUT] [--mut1 MUT | --mut2 MUT] [--c1 C1]
options:
-h, --help show this help message and exit
--common COMMON
--c1 C1
New Group:
Description.
--mut1 MUT
--mut2 MUT
--non-mut NON_MUT
</code>
<code>usage: argparse_debug.py command1 [-h] [--common COMMON] [--non-mut NON_MUT] [--mut1 MUT | --mut2 MUT] [--c1 C1]
options:
-h, --help show this help message and exit
--common COMMON
--c1 C1
New Group:
Description.
--mut1 MUT
--mut2 MUT
--non-mut NON_MUT
</code>
usage: argparse_debug.py command1 [-h] [--common COMMON] [--non-mut NON_MUT] [--mut1 MUT | --mut2 MUT] [--c1 C1]
options:
-h, --help show this help message and exit
--common COMMON
--c1 C1
New Group:
Description.
--mut1 MUT
--mut2 MUT
--non-mut NON_MUT
Also note that parent_parser.print_help()
has the expected behavior, so something is lost when set as a parent.
<code>usage: argparse_debug.py [--common COMMON] [--non-mut NON_MUT] [--mut1 MUT | --mut2 MUT]
options:
--common COMMON
New Group:
Description.
--non-mut NON_MUT
--mut1 MUT
--mut2 MUT
</code>
<code>usage: argparse_debug.py [--common COMMON] [--non-mut NON_MUT] [--mut1 MUT | --mut2 MUT]
options:
--common COMMON
New Group:
Description.
--non-mut NON_MUT
--mut1 MUT
--mut2 MUT
</code>
usage: argparse_debug.py [--common COMMON] [--non-mut NON_MUT] [--mut1 MUT | --mut2 MUT]
options:
--common COMMON
New Group:
Description.
--non-mut NON_MUT
--mut1 MUT
--mut2 MUT
How can I get a common mutually exclusive group with its own title/description in the help message of a subcommand?