summaryrefslogtreecommitdiffstats
path: root/Doc/library/argparse.rst
diff options
context:
space:
mode:
authorSerhiy Storchaka <storchaka@gmail.com>2024-02-05 22:41:34 (GMT)
committerGitHub <noreply@github.com>2024-02-05 22:41:34 (GMT)
commitbb57ffdb38e9e8df8f9ea71f1430dbbe4bf2d3ac (patch)
treeab97e452b3e97ebc5375ba2229e5cf45707935f7 /Doc/library/argparse.rst
parentc32bae52904723d99e1f98e2ef54570268d86467 (diff)
downloadcpython-bb57ffdb38e9e8df8f9ea71f1430dbbe4bf2d3ac.zip
cpython-bb57ffdb38e9e8df8f9ea71f1430dbbe4bf2d3ac.tar.gz
cpython-bb57ffdb38e9e8df8f9ea71f1430dbbe4bf2d3ac.tar.bz2
gh-83648: Support deprecation of options, arguments and subcommands in argparse (GH-114086)
Diffstat (limited to 'Doc/library/argparse.rst')
-rw-r--r--Doc/library/argparse.rst47
1 files changed, 46 insertions, 1 deletions
diff --git a/Doc/library/argparse.rst b/Doc/library/argparse.rst
index 1395d45..952643a 100644
--- a/Doc/library/argparse.rst
+++ b/Doc/library/argparse.rst
@@ -777,6 +777,8 @@ The add_argument() method
* dest_ - The name of the attribute to be added to the object returned by
:meth:`parse_args`.
+ * deprecated_ - Whether or not use of the argument is deprecated.
+
The following sections describe how each of these are used.
@@ -1439,6 +1441,34 @@ behavior::
>>> parser.parse_args('--foo XXX'.split())
Namespace(bar='XXX')
+
+.. _deprecated:
+
+deprecated
+^^^^^^^^^^
+
+During a project's lifetime, some arguments may need to be removed from the
+command line. Before removing them, you should inform
+your users that the arguments are deprecated and will be removed.
+The ``deprecated`` keyword argument of
+:meth:`~ArgumentParser.add_argument`, which defaults to ``False``,
+specifies if the argument is deprecated and will be removed
+in the future.
+For arguments, if ``deprecated`` is ``True``, then a warning will be
+printed to standard error when the argument is used::
+
+ >>> import argparse
+ >>> parser = argparse.ArgumentParser(prog='snake.py')
+ >>> parser.add_argument('--legs', default=0, type=int, deprecated=True)
+ >>> parser.parse_args([])
+ Namespace(legs=0)
+ >>> parser.parse_args(['--legs', '4']) # doctest: +SKIP
+ snake.py: warning: option '--legs' is deprecated
+ Namespace(legs=4)
+
+.. versionchanged:: 3.13
+
+
Action classes
^^^^^^^^^^^^^^
@@ -1842,7 +1872,8 @@ Sub-commands
{foo,bar} additional help
- Furthermore, ``add_parser`` supports an additional ``aliases`` argument,
+ 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``::
@@ -1853,6 +1884,20 @@ Sub-commands
>>> 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 sub-commands is to combine the use
of the :meth:`add_subparsers` method with calls to :meth:`set_defaults` so
that each subparser knows which Python function it should execute. For