-
-
Notifications
You must be signed in to change notification settings - Fork 33.9k
gh-84116: Docs: Document help and aliases for argparse.add_parser() #140574
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from all commits
810fde1
b9ca059
bfbf864
16a1c46
639865d
3f0aa48
343648b
4b07ba3
8bb4bae
3361447
100207d
0f27e63
7e6102a
a76954c
ac2b754
b08e8ed
fa1d877
e955fb0
3d4cf26
e3af10b
59a1ad9
defd2c3
cd445fc
2e270ef
3e87e19
1867c71
ef450f6
4d27843
83ff9bf
77cc182
1a5c449
2dd07bb
850c986
7f95d28
18cbbae
554a3ca
312aa0f
53031db
6afe4d5
a10e6a5
d551718
6f94eda
d0ccf81
99af040
57d971d
2325383
f8c3bdd
2bea80e
1363eb8
6bf969c
05213dd
a3ae75b
37e88c2
8b05541
2e7f2b0
e3e5071
b6975a7
04a0482
0d4fcb5
7d3982f
b2ff463
5709cc6
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change | ||||
|---|---|---|---|---|---|---|
|
|
@@ -1771,7 +1771,7 @@ Subcommands | |||||
| >>> parser.parse_args(['--foo', 'b', '--baz', 'Z']) | ||||||
| Namespace(baz='Z', foo=True) | ||||||
|
|
||||||
| Note that the object returned by :meth:`parse_args` will only contain | ||||||
| Note that the object returned by :meth:`~ArgumentParser.parse_args` will only contain | ||||||
| attributes for the main parser and the subparser that was selected by the | ||||||
| command line (and not any other subparsers). So in the example above, when | ||||||
| the ``a`` command is specified, only the ``foo`` and ``bar`` attributes are | ||||||
|
|
@@ -1814,7 +1814,7 @@ Subcommands | |||||
| -h, --help show this help message and exit | ||||||
| --baz {X,Y,Z} baz help | ||||||
|
|
||||||
| The :meth:`add_subparsers` method also supports ``title`` and ``description`` | ||||||
| The :meth:`~ArgumentParser.add_subparsers` method also supports ``title`` and ``description`` | ||||||
| keyword arguments. When either is present, the subparser's commands will | ||||||
| appear in their own group in the help output. For example:: | ||||||
|
|
||||||
|
|
@@ -1835,34 +1835,8 @@ Subcommands | |||||
|
|
||||||
| {foo,bar} additional help | ||||||
|
|
||||||
| Furthermore, :meth:`~_SubParsersAction.add_parser` supports an additional | ||||||
| *aliases* argument, | ||||||
| which allows multiple strings to refer to the same subparser. This example, | ||||||
| like ``svn``, aliases ``co`` as a shorthand for ``checkout``:: | ||||||
|
|
||||||
| >>> parser = argparse.ArgumentParser() | ||||||
| >>> subparsers = parser.add_subparsers() | ||||||
| >>> checkout = subparsers.add_parser('checkout', aliases=['co']) | ||||||
| >>> checkout.add_argument('foo') | ||||||
| >>> parser.parse_args(['co', 'bar']) | ||||||
| Namespace(foo='bar') | ||||||
|
|
||||||
| :meth:`~_SubParsersAction.add_parser` supports also an additional | ||||||
| *deprecated* argument, which allows to deprecate the subparser. | ||||||
|
|
||||||
| >>> import argparse | ||||||
| >>> parser = argparse.ArgumentParser(prog='chicken.py') | ||||||
| >>> subparsers = parser.add_subparsers() | ||||||
| >>> run = subparsers.add_parser('run') | ||||||
| >>> fly = subparsers.add_parser('fly', deprecated=True) | ||||||
| >>> parser.parse_args(['fly']) # doctest: +SKIP | ||||||
| chicken.py: warning: command 'fly' is deprecated | ||||||
| Namespace() | ||||||
|
|
||||||
| .. versionadded:: 3.13 | ||||||
|
|
||||||
| One particularly effective way of handling subcommands is to combine the use | ||||||
| of the :meth:`add_subparsers` method with calls to :meth:`set_defaults` so | ||||||
| of the :meth:`~ArgumentParser.add_subparsers` method with calls to :meth:`~ArgumentParser.set_defaults` so | ||||||
| that each subparser knows which Python function it should execute. For | ||||||
| example:: | ||||||
|
|
||||||
|
|
@@ -1898,12 +1872,12 @@ Subcommands | |||||
| >>> args.func(args) | ||||||
| ((XYZYX)) | ||||||
|
|
||||||
| This way, you can let :meth:`parse_args` do the job of calling the | ||||||
| This way, you can let :meth:`~ArgumentParser.parse_args` do the job of calling the | ||||||
| appropriate function after argument parsing is complete. Associating | ||||||
| functions with actions like this is typically the easiest way to handle the | ||||||
| different actions for each of your subparsers. However, if it is necessary | ||||||
| to check the name of the subparser that was invoked, the ``dest`` keyword | ||||||
| argument to the :meth:`add_subparsers` call will work:: | ||||||
| argument to the :meth:`~ArgumentParser.add_subparsers` call will work:: | ||||||
|
|
||||||
| >>> parser = argparse.ArgumentParser() | ||||||
| >>> subparsers = parser.add_subparsers(dest='subparser_name') | ||||||
|
|
@@ -1922,6 +1896,42 @@ Subcommands | |||||
| the main parser. | ||||||
|
|
||||||
|
|
||||||
| .. method:: _SubParsersAction.add_parser(name, *, help=None, aliases=None, | ||||||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
When the signature requires multi lines I think we need this additional break. But if the docs render well without it you do not need to add it. |
||||||
| deprecated=False, **kwargs) | ||||||
|
|
||||||
| Create and return a new :class:`ArgumentParser` object for the | ||||||
| subcommand *name*. | ||||||
|
|
||||||
| The *name* argument is the name of the sub-command. | ||||||
|
|
||||||
| The *help* argument provides a short description for this sub-command. | ||||||
|
|
||||||
| The *aliases* argument allows providing alternative names for this | ||||||
| sub-command. For example:: | ||||||
|
|
||||||
| >>> parser = argparse.ArgumentParser() | ||||||
| >>> subparsers = parser.add_subparsers() | ||||||
| >>> checkout = subparsers.add_parser('checkout', aliases=['co']) | ||||||
| >>> checkout.add_argument('foo') | ||||||
| >>> parser.parse_args(['co', 'bar']) | ||||||
| Namespace(foo='bar') | ||||||
|
|
||||||
| The *deprecated* argument, if ``True``, marks the sub-command as | ||||||
| deprecated and will issue a warning when used. For example:: | ||||||
|
|
||||||
| >>> parser = argparse.ArgumentParser(prog='chicken.py') | ||||||
| >>> subparsers = parser.add_subparsers() | ||||||
| >>> fly = subparsers.add_parser('fly', deprecated=True) | ||||||
| >>> args = parser.parse_args(['fly']) # doctest: +SKIP | ||||||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Can you remove the doctest skip? and write down the exact output so that we also catch message regressions just in case? ty |
||||||
| chicken.py: warning: command 'fly' is deprecated | ||||||
|
|
||||||
| All other keyword arguments are passed directly to the | ||||||
| :class:`!ArgumentParser` constructor. | ||||||
|
|
||||||
Krishna-web-hub marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||
| .. versionadded:: 3.13 | ||||||
| Added the *deprecated* parameter. | ||||||
|
|
||||||
|
|
||||||
| FileType objects | ||||||
| ^^^^^^^^^^^^^^^^ | ||||||
|
|
||||||
|
|
||||||
Uh oh!
There was an error while loading. Please reload this page.