2010-03-02 04:38:09 -04:00
|
|
|
:mod:`getopt` --- C-style parser for command line options
|
|
|
|
=========================================================
|
2007-08-15 11:28:01 -03:00
|
|
|
|
|
|
|
.. module:: getopt
|
|
|
|
:synopsis: Portable parser for command line options; support both short and long option
|
|
|
|
names.
|
|
|
|
|
2011-08-18 21:14:03 -03:00
|
|
|
**Source code:** :source:`Lib/getopt.py`
|
|
|
|
|
|
|
|
--------------
|
|
|
|
|
2010-05-23 23:38:00 -03:00
|
|
|
.. note::
|
|
|
|
The :mod:`getopt` module is a parser for command line options whose API is
|
2012-01-14 11:42:02 -04:00
|
|
|
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
|
2010-05-23 23:38:00 -03:00
|
|
|
less code and get better help and error messages should consider using the
|
|
|
|
:mod:`argparse` module instead.
|
2007-08-15 11:28:01 -03:00
|
|
|
|
|
|
|
This module helps scripts to parse the command line arguments in ``sys.argv``.
|
2012-01-14 11:42:02 -04:00
|
|
|
It supports the same conventions as the Unix :c:func:`getopt` function (including
|
2007-12-29 06:57:00 -04:00
|
|
|
the special meanings of arguments of the form '``-``' and '``--``'). Long
|
2007-08-15 11:28:01 -03:00
|
|
|
options similar to those supported by GNU software may be used as well via an
|
2008-09-08 11:45:37 -03:00
|
|
|
optional third argument.
|
|
|
|
|
|
|
|
This module provides two functions and an
|
2007-08-15 11:28:01 -03:00
|
|
|
exception:
|
|
|
|
|
|
|
|
|
|
|
|
.. function:: getopt(args, options[, long_options])
|
|
|
|
|
|
|
|
Parses command line options and parameter list. *args* is the argument list to
|
|
|
|
be parsed, without the leading reference to the running program. Typically, this
|
|
|
|
means ``sys.argv[1:]``. *options* is the string of option letters that the
|
|
|
|
script wants to recognize, with options that require an argument followed by a
|
2012-01-14 11:42:02 -04:00
|
|
|
colon (``':'``; i.e., the same format that Unix :c:func:`getopt` uses).
|
2007-08-15 11:28:01 -03:00
|
|
|
|
|
|
|
.. note::
|
|
|
|
|
2012-01-14 11:42:02 -04:00
|
|
|
Unlike GNU :c:func:`getopt`, after a non-option argument, all further
|
2009-10-22 12:54:35 -03:00
|
|
|
arguments are considered also non-options. This is similar to the way
|
|
|
|
non-GNU Unix systems work.
|
2007-08-15 11:28:01 -03:00
|
|
|
|
|
|
|
*long_options*, if specified, must be a list of strings with the names of the
|
Merged revisions 86521,86632,86823-86824,87294,87296,87300,87302 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/branches/py3k
........
r86521 | eric.araujo | 2010-11-18 17:38:46 +0100 (jeu., 18 nov. 2010) | 17 lines
Fix usage of :option: in the docs (#9312).
:option: is used to create a link to an option of python, not to mark
up any instance of any arbitrary command-line option. These were
changed to ````.
For modules which do have a command-line interface, lists of options
have been properly marked up with the program/cmdoption directives
combo. Options defined in such blocks can be linked to with :option:
later in the same file, they won’t link to an option of python.
Finally, the markup of command-line fragments in optparse.rst has
been cleaned to use ``x`` instead of ``"x"``, keeping that latter
form for actual Python strings.
Patch by Eli Bendersky and Éric Araujo.
........
r86632 | eric.araujo | 2010-11-21 04:09:17 +0100 (dim., 21 nov. 2010) | 2 lines
Style edits in followup to r86521 (#9312)
........
r86823 | eric.araujo | 2010-11-27 00:31:07 +0100 (sam., 27 nov. 2010) | 2 lines
Use link-generating markup (see #9312)
........
r86824 | eric.araujo | 2010-11-27 00:46:18 +0100 (sam., 27 nov. 2010) | 2 lines
Rewrap long lines + minor edits
........
r87294 | eric.araujo | 2010-12-16 01:07:01 +0100 (jeu., 16 déc. 2010) | 2 lines
No need to generate a link for something that’s just above.
........
r87296 | eric.araujo | 2010-12-16 01:23:30 +0100 (jeu., 16 déc. 2010) | 2 lines
Advertise “python -m” instead of direct filename.
........
r87300 | eric.araujo | 2010-12-16 02:40:26 +0100 (jeu., 16 déc. 2010) | 2 lines
Advertise “python -m test” over test.regrtest (r87296 followup)
........
r87302 | eric.araujo | 2010-12-16 03:10:11 +0100 (jeu., 16 déc. 2010) | 2 lines
Add versionadded directive missing from r78983.
........
2010-12-15 23:53:53 -04:00
|
|
|
long options which should be supported. The leading ``'--'``
|
2009-10-22 12:54:35 -03:00
|
|
|
characters should not be included in the option name. Long options which
|
|
|
|
require an argument should be followed by an equal sign (``'='``). Optional
|
|
|
|
arguments are not supported. To accept only long options, *options* should
|
|
|
|
be an empty string. Long options on the command line can be recognized so
|
|
|
|
long as they provide a prefix of the option name that matches exactly one of
|
|
|
|
the accepted options. For example, if *long_options* is ``['foo', 'frob']``,
|
Merged revisions 86521,86632,86823-86824,87294,87296,87300,87302 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/branches/py3k
........
r86521 | eric.araujo | 2010-11-18 17:38:46 +0100 (jeu., 18 nov. 2010) | 17 lines
Fix usage of :option: in the docs (#9312).
:option: is used to create a link to an option of python, not to mark
up any instance of any arbitrary command-line option. These were
changed to ````.
For modules which do have a command-line interface, lists of options
have been properly marked up with the program/cmdoption directives
combo. Options defined in such blocks can be linked to with :option:
later in the same file, they won’t link to an option of python.
Finally, the markup of command-line fragments in optparse.rst has
been cleaned to use ``x`` instead of ``"x"``, keeping that latter
form for actual Python strings.
Patch by Eli Bendersky and Éric Araujo.
........
r86632 | eric.araujo | 2010-11-21 04:09:17 +0100 (dim., 21 nov. 2010) | 2 lines
Style edits in followup to r86521 (#9312)
........
r86823 | eric.araujo | 2010-11-27 00:31:07 +0100 (sam., 27 nov. 2010) | 2 lines
Use link-generating markup (see #9312)
........
r86824 | eric.araujo | 2010-11-27 00:46:18 +0100 (sam., 27 nov. 2010) | 2 lines
Rewrap long lines + minor edits
........
r87294 | eric.araujo | 2010-12-16 01:07:01 +0100 (jeu., 16 déc. 2010) | 2 lines
No need to generate a link for something that’s just above.
........
r87296 | eric.araujo | 2010-12-16 01:23:30 +0100 (jeu., 16 déc. 2010) | 2 lines
Advertise “python -m” instead of direct filename.
........
r87300 | eric.araujo | 2010-12-16 02:40:26 +0100 (jeu., 16 déc. 2010) | 2 lines
Advertise “python -m test” over test.regrtest (r87296 followup)
........
r87302 | eric.araujo | 2010-12-16 03:10:11 +0100 (jeu., 16 déc. 2010) | 2 lines
Add versionadded directive missing from r78983.
........
2010-12-15 23:53:53 -04:00
|
|
|
the option ``--fo`` will match as ``--foo``, but ``--f``
|
2009-10-22 12:54:35 -03:00
|
|
|
will not match uniquely, so :exc:`GetoptError` will be raised.
|
2007-08-15 11:28:01 -03:00
|
|
|
|
|
|
|
The return value consists of two elements: the first is a list of ``(option,
|
|
|
|
value)`` pairs; the second is the list of program arguments left after the
|
|
|
|
option list was stripped (this is a trailing slice of *args*). Each
|
|
|
|
option-and-value pair returned has the option as its first element, prefixed
|
|
|
|
with a hyphen for short options (e.g., ``'-x'``) or two hyphens for long
|
Merged revisions 86521,86632,86823-86824,87294,87296,87300,87302 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/branches/py3k
........
r86521 | eric.araujo | 2010-11-18 17:38:46 +0100 (jeu., 18 nov. 2010) | 17 lines
Fix usage of :option: in the docs (#9312).
:option: is used to create a link to an option of python, not to mark
up any instance of any arbitrary command-line option. These were
changed to ````.
For modules which do have a command-line interface, lists of options
have been properly marked up with the program/cmdoption directives
combo. Options defined in such blocks can be linked to with :option:
later in the same file, they won’t link to an option of python.
Finally, the markup of command-line fragments in optparse.rst has
been cleaned to use ``x`` instead of ``"x"``, keeping that latter
form for actual Python strings.
Patch by Eli Bendersky and Éric Araujo.
........
r86632 | eric.araujo | 2010-11-21 04:09:17 +0100 (dim., 21 nov. 2010) | 2 lines
Style edits in followup to r86521 (#9312)
........
r86823 | eric.araujo | 2010-11-27 00:31:07 +0100 (sam., 27 nov. 2010) | 2 lines
Use link-generating markup (see #9312)
........
r86824 | eric.araujo | 2010-11-27 00:46:18 +0100 (sam., 27 nov. 2010) | 2 lines
Rewrap long lines + minor edits
........
r87294 | eric.araujo | 2010-12-16 01:07:01 +0100 (jeu., 16 déc. 2010) | 2 lines
No need to generate a link for something that’s just above.
........
r87296 | eric.araujo | 2010-12-16 01:23:30 +0100 (jeu., 16 déc. 2010) | 2 lines
Advertise “python -m” instead of direct filename.
........
r87300 | eric.araujo | 2010-12-16 02:40:26 +0100 (jeu., 16 déc. 2010) | 2 lines
Advertise “python -m test” over test.regrtest (r87296 followup)
........
r87302 | eric.araujo | 2010-12-16 03:10:11 +0100 (jeu., 16 déc. 2010) | 2 lines
Add versionadded directive missing from r78983.
........
2010-12-15 23:53:53 -04:00
|
|
|
options (e.g., ``'--long-option'``), and the option argument as its
|
2007-08-15 11:28:01 -03:00
|
|
|
second element, or an empty string if the option has no argument. The
|
|
|
|
options occur in the list in the same order in which they were found, thus
|
|
|
|
allowing multiple occurrences. Long and short options may be mixed.
|
|
|
|
|
|
|
|
|
|
|
|
.. function:: gnu_getopt(args, options[, long_options])
|
|
|
|
|
|
|
|
This function works like :func:`getopt`, except that GNU style scanning mode is
|
|
|
|
used by default. This means that option and non-option arguments may be
|
|
|
|
intermixed. The :func:`getopt` function stops processing options as soon as a
|
|
|
|
non-option argument is encountered.
|
|
|
|
|
Merged revisions 86521,86632,86823-86824,87294,87296,87300,87302 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/branches/py3k
........
r86521 | eric.araujo | 2010-11-18 17:38:46 +0100 (jeu., 18 nov. 2010) | 17 lines
Fix usage of :option: in the docs (#9312).
:option: is used to create a link to an option of python, not to mark
up any instance of any arbitrary command-line option. These were
changed to ````.
For modules which do have a command-line interface, lists of options
have been properly marked up with the program/cmdoption directives
combo. Options defined in such blocks can be linked to with :option:
later in the same file, they won’t link to an option of python.
Finally, the markup of command-line fragments in optparse.rst has
been cleaned to use ``x`` instead of ``"x"``, keeping that latter
form for actual Python strings.
Patch by Eli Bendersky and Éric Araujo.
........
r86632 | eric.araujo | 2010-11-21 04:09:17 +0100 (dim., 21 nov. 2010) | 2 lines
Style edits in followup to r86521 (#9312)
........
r86823 | eric.araujo | 2010-11-27 00:31:07 +0100 (sam., 27 nov. 2010) | 2 lines
Use link-generating markup (see #9312)
........
r86824 | eric.araujo | 2010-11-27 00:46:18 +0100 (sam., 27 nov. 2010) | 2 lines
Rewrap long lines + minor edits
........
r87294 | eric.araujo | 2010-12-16 01:07:01 +0100 (jeu., 16 déc. 2010) | 2 lines
No need to generate a link for something that’s just above.
........
r87296 | eric.araujo | 2010-12-16 01:23:30 +0100 (jeu., 16 déc. 2010) | 2 lines
Advertise “python -m” instead of direct filename.
........
r87300 | eric.araujo | 2010-12-16 02:40:26 +0100 (jeu., 16 déc. 2010) | 2 lines
Advertise “python -m test” over test.regrtest (r87296 followup)
........
r87302 | eric.araujo | 2010-12-16 03:10:11 +0100 (jeu., 16 déc. 2010) | 2 lines
Add versionadded directive missing from r78983.
........
2010-12-15 23:53:53 -04:00
|
|
|
If the first character of the option string is ``'+'``, or if the environment
|
2008-12-05 05:13:45 -04:00
|
|
|
variable :envvar:`POSIXLY_CORRECT` is set, then option processing stops as
|
|
|
|
soon as a non-option argument is encountered.
|
2007-08-15 11:28:01 -03:00
|
|
|
|
|
|
|
.. versionadded:: 2.3
|
|
|
|
|
|
|
|
|
|
|
|
.. exception:: GetoptError
|
|
|
|
|
|
|
|
This is raised when an unrecognized option is found in the argument list or when
|
|
|
|
an option requiring an argument is given none. The argument to the exception is
|
|
|
|
a string indicating the cause of the error. For long options, an argument given
|
|
|
|
to an option which does not require one will also cause this exception to be
|
|
|
|
raised. The attributes :attr:`msg` and :attr:`opt` give the error message and
|
|
|
|
related option; if there is no specific option to which the exception relates,
|
|
|
|
:attr:`opt` is an empty string.
|
|
|
|
|
|
|
|
.. versionchanged:: 1.6
|
|
|
|
Introduced :exc:`GetoptError` as a synonym for :exc:`error`.
|
|
|
|
|
|
|
|
|
|
|
|
.. exception:: error
|
|
|
|
|
|
|
|
Alias for :exc:`GetoptError`; for backward compatibility.
|
|
|
|
|
2008-03-22 19:04:10 -03:00
|
|
|
An example using only Unix style options:
|
2007-08-15 11:28:01 -03:00
|
|
|
|
|
|
|
>>> import getopt
|
|
|
|
>>> args = '-a -b -cfoo -d bar a1 a2'.split()
|
|
|
|
>>> args
|
|
|
|
['-a', '-b', '-cfoo', '-d', 'bar', 'a1', 'a2']
|
|
|
|
>>> optlist, args = getopt.getopt(args, 'abc:d:')
|
|
|
|
>>> optlist
|
|
|
|
[('-a', ''), ('-b', ''), ('-c', 'foo'), ('-d', 'bar')]
|
|
|
|
>>> args
|
|
|
|
['a1', 'a2']
|
|
|
|
|
2008-03-22 19:04:10 -03:00
|
|
|
Using long option names is equally easy:
|
2007-08-15 11:28:01 -03:00
|
|
|
|
|
|
|
>>> s = '--condition=foo --testing --output-file abc.def -x a1 a2'
|
|
|
|
>>> args = s.split()
|
|
|
|
>>> args
|
|
|
|
['--condition=foo', '--testing', '--output-file', 'abc.def', '-x', 'a1', 'a2']
|
|
|
|
>>> optlist, args = getopt.getopt(args, 'x', [
|
|
|
|
... 'condition=', 'output-file=', 'testing'])
|
|
|
|
>>> optlist
|
2008-03-22 19:04:10 -03:00
|
|
|
[('--condition', 'foo'), ('--testing', ''), ('--output-file', 'abc.def'), ('-x', '')]
|
2007-08-15 11:28:01 -03:00
|
|
|
>>> args
|
|
|
|
['a1', 'a2']
|
|
|
|
|
|
|
|
In a script, typical usage is something like this::
|
|
|
|
|
2009-02-19 23:31:23 -04:00
|
|
|
import getopt, sys
|
2007-08-15 11:28:01 -03:00
|
|
|
|
|
|
|
def main():
|
|
|
|
try:
|
|
|
|
opts, args = getopt.getopt(sys.argv[1:], "ho:v", ["help", "output="])
|
2012-10-30 16:56:43 -03:00
|
|
|
except getopt.GetoptError as err:
|
2007-08-15 11:28:01 -03:00
|
|
|
# print help information and exit:
|
|
|
|
print str(err) # will print something like "option -a not recognized"
|
|
|
|
usage()
|
|
|
|
sys.exit(2)
|
|
|
|
output = None
|
|
|
|
verbose = False
|
|
|
|
for o, a in opts:
|
|
|
|
if o == "-v":
|
|
|
|
verbose = True
|
|
|
|
elif o in ("-h", "--help"):
|
|
|
|
usage()
|
|
|
|
sys.exit()
|
|
|
|
elif o in ("-o", "--output"):
|
|
|
|
output = a
|
|
|
|
else:
|
|
|
|
assert False, "unhandled option"
|
|
|
|
# ...
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
|
main()
|
|
|
|
|
2010-05-23 23:38:00 -03:00
|
|
|
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::
|
|
|
|
|
|
|
|
import argparse
|
|
|
|
|
|
|
|
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 ..
|
2007-08-15 11:28:01 -03:00
|
|
|
|
|
|
|
.. seealso::
|
|
|
|
|
2010-05-23 23:38:00 -03:00
|
|
|
Module :mod:`argparse`
|
|
|
|
Alternative command line option and argument parsing library.
|
2007-08-15 11:28:01 -03:00
|
|
|
|