import argparse def foo(names=[]): parser = argparse.ArgumentParser(help_groups=names) parser.add_argument('pos', help='required positional') group = parser.add_argument_group('user group') parser.add_argument('-f', '--foo', help='optional') parser.add_argument('-g', '--goo', required=True, help='required optional') group.add_argument('--garg', help='group arg') parser.add_argument('baz', nargs='?', help='optional positional') parser.print_help() print(parser.parse_args('-f FOO -g GOO pos baz'.split())) print() for names in ['', 'all', 'positionals optionals', 'positionals required optionals']: foo(names.split()) """ usage: alt_grouping2.py [-h] [-f FOO] -g GOO [--garg GARG] pos [baz] positionals: pos required positional baz optional positional required: -g GOO, --goo GOO required optional optionals: -h, --help show this help message and exit -f FOO, --foo FOO optional user group: --garg GARG group arg """