New submission from Martin d'Anjou: Consider the following code:
#!/usr/bin/env python3 import argparse # create the top-level parser parser = argparse.ArgumentParser(prog='PROG') parser.add_argument('--file', help='A filename', required=True) subparsers = parser.add_subparsers(help='sub-command help') # create the parser for the "a" command parser_a = subparsers.add_parser('a', help='a help') parser_a.add_argument('bar', type=int, help='bar help') # create the parser for the "b" command parser_b = subparsers.add_parser('b', help='b help') parser_b.add_argument('--baz', choices='XYZ', help='baz help') The help for subparser a is obtained with: parser.parse_args(["a","--help"]) usage: PROG a [-h] bar positional arguments: bar bar help optional arguments: -h, --help show this help message and exit When the user follows the help, the user gets it wrong: parser.parse_args(["a","10"]) usage: PROG [-h] --file FILE {a,b} ... PROG: error: argument --file is required The correct way to use the subparser is: parser.parse_args(["--file","file","a","10"]) But the problem is that the original help message is not telling the user that this is the correct way. When asking for the "a" subparser help, the usage message should also reveal the main parser arguments. Continuing with the example, something like this should be appropriate: usage: PROG [-h] --file FILE a [-h] bar This is how the argparse Java port works. ---------- components: Library (Lib) messages: 208670 nosy: Martin.d'Anjou priority: normal severity: normal status: open title: argparse subparser usage message hides main parser usage type: enhancement versions: Python 3.3 _______________________________________ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue20333> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com