-
-
Notifications
You must be signed in to change notification settings - Fork 33.2k
gh-126180: Remove getopt and optparse deprecation notices #126227
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
Changes from 15 commits
a560986
0a568f1
55b7215
0971780
09b0237
4cdebde
693a979
50d1ee4
4e50c74
0db2c88
e474e77
43234de
93d7161
bb91b52
7cc72ad
7f51456
5d86774
c2ae293
5e2fcd9
457ee88
f67d20c
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 |
|---|---|---|
|
|
@@ -11,6 +11,20 @@ | |
|
|
||
| **Source code:** :source:`Lib/argparse.py` | ||
|
|
||
| .. note:: | ||
|
|
||
| While :mod:`argparse` is the recommended standard library module for | ||
|
||
| *implementing* basic command line applications, authors of third party | ||
| command line argument processing libraries may find that the | ||
| lower level :mod:`optparse` module serves as a better foundation for | ||
| that use case. ``optparse`` (or one of the third party libraries | ||
| based on it) may also be worth considering for applications where | ||
| ``argparse`` doesn't support behaviors that the application requires | ||
| (such as entirely disabling support for interspersed options and | ||
| positional arguments, or stricter adherence to common Unix and Linux | ||
ncoghlan marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
| command line interface conventions related to the handling of option | ||
| parameter values that start with ``-``). | ||
|
|
||
| -------------- | ||
|
|
||
| .. sidebar:: Tutorial | ||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,21 @@ | ||
| .. _cmdlinelibs: | ||
|
|
||
| ******************************** | ||
| Command Line Interface Libraries | ||
| ******************************** | ||
|
|
||
| The modules described in this chapter assist with implementing | ||
| command line and terminal interfaces for applications. | ||
|
|
||
| Here's an overview: | ||
|
|
||
| .. toctree:: | ||
| :maxdepth: 1 | ||
|
|
||
| argparse.rst | ||
| optparse.rst | ||
gpshead marked this conversation as resolved.
Show resolved
Hide resolved
|
||
| getpass.rst | ||
| fileinput.rst | ||
| curses.rst | ||
| curses.ascii.rst | ||
| curses.panel.rst | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -14,7 +14,6 @@ in this chapter is: | |
|
|
||
| pathlib.rst | ||
| os.path.rst | ||
| fileinput.rst | ||
| stat.rst | ||
| filecmp.rst | ||
| tempfile.rst | ||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -7,18 +7,13 @@ | |
|
|
||
| **Source code:** :source:`Lib/getopt.py` | ||
|
|
||
| .. deprecated:: 3.13 | ||
| The :mod:`getopt` module is :term:`soft deprecated` and will not be | ||
| developed further; development will continue with the :mod:`argparse` | ||
| module. | ||
|
|
||
| .. note:: | ||
gpshead marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
|
||
| The :mod:`getopt` module is a parser for command line options whose API is | ||
| designed to be familiar to users of the C :c:func:`!getopt` function. Users who | ||
| are unfamiliar with the C :c:func:`!getopt` function or who would like to write | ||
| less code and get better help and error messages should consider using the | ||
| :mod:`argparse` module instead. | ||
| This module is considered feature complete. A more object-oriented and | ||
| extensible alternative to this API is provided in the :mod:`optparse` | ||
| module. Further functional enhancements for command line parameter | ||
| processing are provided either as third party modules on PyPI, | ||
| or else as features in the :mod:`argparse` module. | ||
|
|
||
| -------------- | ||
|
|
||
|
|
@@ -28,6 +23,12 @@ | |
| options similar to those supported by GNU software may be used as well via an | ||
| optional third argument. | ||
|
|
||
| Users who are unfamiliar with the Unix :c:func:`!getopt` function should consider | ||
| using the :mod:`argparse` module instead. Users who are familiar with the Unix | ||
| :c:func:`!getopt` function, but would like to get equivalent behavior while | ||
| writing less code and getting better help and error messages should consider | ||
| using the :mod:`optparse` module. | ||
|
|
||
| This module provides two functions and an | ||
| exception: | ||
|
|
||
|
|
@@ -144,26 +145,65 @@ | |
| output = a | ||
| else: | ||
| assert False, "unhandled option" | ||
| # ... | ||
| process(args, output=output, verbose=verbose) | ||
|
|
||
| if __name__ == "__main__": | ||
| main() | ||
|
|
||
| Note that an equivalent command line interface could be produced with less code | ||
| and more informative help and error messages by using the :mod:`argparse` module:: | ||
| and more informative help and error messages by using the :mod:`optparse` module:: | ||
|
|
||
| import argparse | ||
| import optparse | ||
|
|
||
| if __name__ == '__main__': | ||
| parser = argparse.ArgumentParser() | ||
| parser.add_argument('-o', '--output') | ||
| parser.add_argument('-v', dest='verbose', action='store_true') | ||
| args = parser.parse_args() | ||
| # ... do something with args.output ... | ||
| # ... do something with args.verbose .. | ||
| parser = optparse.OptionParser() | ||
| parser.add_option('-o', '--output') | ||
| parser.add_option('-v', dest='verbose', action='store_true') | ||
| opts, args = parser.parse_args() | ||
| process(args, output=opts.output, verbose=opts.verbose) | ||
|
|
||
| A roughly equivalent command line interface for this case can also be | ||
| produced by using the :mod:`argparse` module:: | ||
|
|
||
| import argparse | ||
ncoghlan marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
|
|
||
| if __name__ == '__main__': | ||
| parser = argparse.ArgumentParser() | ||
| parser.add_argument('-o', '--output') | ||
| parser.add_argument('-v', dest='verbose', action='store_true') | ||
| parser.add_argument('rest', nargs='*') | ||
| args = parser.parse_args() | ||
| process(args.rest, output=args.output, verbose=args.verbose) | ||
|
|
||
| However, unlike the ``optparse`` example, this ``argparse`` example will | ||
| handle some parameter combinations differently from the way the ``getopt`` | ||
| version would handle them. For example (amongst other differences): | ||
|
|
||
| * supplying ``-o -v`` gives ``output="-v"`` and ``verbose=False`` | ||
| for both ``getopt`` and ``optparse``, | ||
| but a usage error with ``argparse`` | ||
| (complaining that no value has been supplied for ``-o/--output``, | ||
| since ``-v`` is interpreted as meaning the verbosity flag) | ||
| * similarly, supplying ``-o --`` gives ``output="--"`` and ``args=()`` | ||
| for both ``getopt`` and ``optparse``, | ||
| but a usage error with ``argparse`` | ||
| (also complaining that no value has been supplied for ``-o/--output``, | ||
| since ``--`` is interpreted as terminating the option processing | ||
| and treating all remaining values as positional arguments) | ||
| * supplying ``-o=foo`` gives ``output="=foo"`` | ||
| for both ``getopt`` and ``optparse``, | ||
| but gives ``output="foo"`` with ``argparse`` | ||
| (since ``=`` is special cased as an alternative separator for | ||
| option parameter values) | ||
|
|
||
| Whether these differing behaviors in the ``argparse`` version are | ||
| considered desirable or a problem will depend on the specific command line | ||
| application use case. | ||
|
||
|
|
||
| .. seealso:: | ||
|
|
||
| Module :mod:`argparse` | ||
| Alternative command line option and argument parsing library. | ||
| Module :mod:`optparse` | ||
| More object-oriented command line option parsing. | ||
ncoghlan marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
|
|
||
| Module :mod:`argparse` | ||
| More opinionated command line option and argument parsing library. | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,6 @@ | ||
| :mod:`getopt` and :mod:`optparse` are no longer marked as deprecated. | ||
| There are legitimate reasons to use one of these modules in preference to | ||
| :mod:`argparse`, and none of these modules are at risk of being removed | ||
| from the standard library. Of the three, ``argparse`` remains the | ||
| recommended default choice, *unless* one of the concerns noted at the top of | ||
| the ``optparse`` module documentation applies. |
Uh oh!
There was an error while loading. Please reload this page.