2007-08-15 11:28:01 -03:00
|
|
|
|
|
|
|
:mod:`getopt` --- Parser for command line options
|
|
|
|
=================================================
|
|
|
|
|
|
|
|
.. module:: getopt
|
|
|
|
:synopsis: Portable parser for command line options; support both short and long option
|
|
|
|
names.
|
|
|
|
|
|
|
|
|
|
|
|
This module helps scripts to parse the command line arguments in ``sys.argv``.
|
|
|
|
It supports the same conventions as the Unix :cfunc:`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.
|
|
|
|
|
|
|
|
A more convenient, flexible, and powerful alternative is the
|
|
|
|
:mod:`optparse` module.
|
|
|
|
|
|
|
|
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
|
|
|
|
colon (``':'``; i.e., the same format that Unix :cfunc:`getopt` uses).
|
|
|
|
|
|
|
|
.. note::
|
|
|
|
|
Merged revisions 75363,75365,75376,75392,75394,75403,75418,75484,75572,75580,75590,75592,75594-75596,75600,75602-75603,75605-75607,75610-75613,75616-75617,75623,75627,75647 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r75363 | georg.brandl | 2009-10-11 20:31:23 +0200 (So, 11 Okt 2009) | 1 line
Add the Python FAQ lists to the documentation. Copied from sandbox/faq. Many thanks to AMK for the preparation work.
........
r75365 | georg.brandl | 2009-10-11 22:16:16 +0200 (So, 11 Okt 2009) | 1 line
Fix broken links found by "make linkcheck". scipy.org seems to be done right now, so I could not verify links going there.
........
r75376 | benjamin.peterson | 2009-10-12 03:26:07 +0200 (Mo, 12 Okt 2009) | 1 line
platform we don't care about
........
r75392 | andrew.kuchling | 2009-10-13 18:11:49 +0200 (Di, 13 Okt 2009) | 1 line
Various link, textual, and markup fixes
........
r75394 | georg.brandl | 2009-10-13 20:10:59 +0200 (Di, 13 Okt 2009) | 1 line
Fix markup.
........
r75403 | georg.brandl | 2009-10-14 17:57:46 +0200 (Mi, 14 Okt 2009) | 1 line
#7126: os.environ changes *do* take effect in subprocesses started with os.system().
........
r75418 | georg.brandl | 2009-10-14 20:48:32 +0200 (Mi, 14 Okt 2009) | 1 line
#7116: str.join() takes an iterable.
........
r75484 | georg.brandl | 2009-10-18 09:58:12 +0200 (So, 18 Okt 2009) | 1 line
Fix missing word.
........
r75572 | benjamin.peterson | 2009-10-20 23:55:17 +0200 (Di, 20 Okt 2009) | 1 line
clarify buffer arg #7178
........
r75580 | georg.brandl | 2009-10-21 09:15:59 +0200 (Mi, 21 Okt 2009) | 1 line
#7170: fix explanation about non-weakrefable builtin types.
........
r75590 | benjamin.peterson | 2009-10-22 04:36:47 +0200 (Do, 22 Okt 2009) | 1 line
rewrite to be nice to other implementations
........
r75592 | georg.brandl | 2009-10-22 09:05:48 +0200 (Do, 22 Okt 2009) | 1 line
Fix punctuation.
........
r75594 | georg.brandl | 2009-10-22 09:56:02 +0200 (Do, 22 Okt 2009) | 1 line
Fix markup.
........
r75595 | georg.brandl | 2009-10-22 09:56:56 +0200 (Do, 22 Okt 2009) | 1 line
Fix duplicate target.
........
r75596 | georg.brandl | 2009-10-22 10:05:04 +0200 (Do, 22 Okt 2009) | 1 line
Add a new directive marking up implementation details and start using it.
........
r75600 | georg.brandl | 2009-10-22 13:01:46 +0200 (Do, 22 Okt 2009) | 1 line
Make it more robust.
........
r75602 | georg.brandl | 2009-10-22 13:28:06 +0200 (Do, 22 Okt 2009) | 1 line
Document new directive.
........
r75603 | georg.brandl | 2009-10-22 13:28:23 +0200 (Do, 22 Okt 2009) | 1 line
Allow short form with text as argument.
........
r75605 | georg.brandl | 2009-10-22 13:48:10 +0200 (Do, 22 Okt 2009) | 1 line
Use "impl-detail" directive where applicable.
........
r75606 | georg.brandl | 2009-10-22 17:00:06 +0200 (Do, 22 Okt 2009) | 1 line
#6324: membership test tries iteration via __iter__.
........
r75607 | georg.brandl | 2009-10-22 17:04:09 +0200 (Do, 22 Okt 2009) | 1 line
#7088: document new functions in signal as Unix-only.
........
r75610 | georg.brandl | 2009-10-22 17:27:24 +0200 (Do, 22 Okt 2009) | 1 line
Reorder __slots__ fine print and add a clarification.
........
r75611 | georg.brandl | 2009-10-22 17:42:32 +0200 (Do, 22 Okt 2009) | 1 line
#7035: improve docs of the various <method>_errors() functions, and give them docstrings.
........
r75612 | georg.brandl | 2009-10-22 17:52:15 +0200 (Do, 22 Okt 2009) | 1 line
#7156: document curses as Unix-only.
........
r75613 | georg.brandl | 2009-10-22 17:54:35 +0200 (Do, 22 Okt 2009) | 1 line
#6977: getopt does not support optional option arguments.
........
r75616 | georg.brandl | 2009-10-22 18:17:05 +0200 (Do, 22 Okt 2009) | 1 line
Add proper references.
........
r75617 | georg.brandl | 2009-10-22 18:20:55 +0200 (Do, 22 Okt 2009) | 1 line
Make printout margin important.
........
r75623 | georg.brandl | 2009-10-23 10:14:44 +0200 (Fr, 23 Okt 2009) | 1 line
#7188: fix optionxform() docs.
........
r75627 | fred.drake | 2009-10-23 15:04:51 +0200 (Fr, 23 Okt 2009) | 2 lines
add further note about what's passed to optionxform
........
r75647 | georg.brandl | 2009-10-24 12:04:19 +0200 (Sa, 24 Okt 2009) | 1 line
Fix markup.
........
2009-10-27 12:08:27 -03:00
|
|
|
Unlike GNU :cfunc:`getopt`, after a non-option argument, all further
|
|
|
|
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 75363,75365,75376,75392,75394,75403,75418,75484,75572,75580,75590,75592,75594-75596,75600,75602-75603,75605-75607,75610-75613,75616-75617,75623,75627,75647 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r75363 | georg.brandl | 2009-10-11 20:31:23 +0200 (So, 11 Okt 2009) | 1 line
Add the Python FAQ lists to the documentation. Copied from sandbox/faq. Many thanks to AMK for the preparation work.
........
r75365 | georg.brandl | 2009-10-11 22:16:16 +0200 (So, 11 Okt 2009) | 1 line
Fix broken links found by "make linkcheck". scipy.org seems to be done right now, so I could not verify links going there.
........
r75376 | benjamin.peterson | 2009-10-12 03:26:07 +0200 (Mo, 12 Okt 2009) | 1 line
platform we don't care about
........
r75392 | andrew.kuchling | 2009-10-13 18:11:49 +0200 (Di, 13 Okt 2009) | 1 line
Various link, textual, and markup fixes
........
r75394 | georg.brandl | 2009-10-13 20:10:59 +0200 (Di, 13 Okt 2009) | 1 line
Fix markup.
........
r75403 | georg.brandl | 2009-10-14 17:57:46 +0200 (Mi, 14 Okt 2009) | 1 line
#7126: os.environ changes *do* take effect in subprocesses started with os.system().
........
r75418 | georg.brandl | 2009-10-14 20:48:32 +0200 (Mi, 14 Okt 2009) | 1 line
#7116: str.join() takes an iterable.
........
r75484 | georg.brandl | 2009-10-18 09:58:12 +0200 (So, 18 Okt 2009) | 1 line
Fix missing word.
........
r75572 | benjamin.peterson | 2009-10-20 23:55:17 +0200 (Di, 20 Okt 2009) | 1 line
clarify buffer arg #7178
........
r75580 | georg.brandl | 2009-10-21 09:15:59 +0200 (Mi, 21 Okt 2009) | 1 line
#7170: fix explanation about non-weakrefable builtin types.
........
r75590 | benjamin.peterson | 2009-10-22 04:36:47 +0200 (Do, 22 Okt 2009) | 1 line
rewrite to be nice to other implementations
........
r75592 | georg.brandl | 2009-10-22 09:05:48 +0200 (Do, 22 Okt 2009) | 1 line
Fix punctuation.
........
r75594 | georg.brandl | 2009-10-22 09:56:02 +0200 (Do, 22 Okt 2009) | 1 line
Fix markup.
........
r75595 | georg.brandl | 2009-10-22 09:56:56 +0200 (Do, 22 Okt 2009) | 1 line
Fix duplicate target.
........
r75596 | georg.brandl | 2009-10-22 10:05:04 +0200 (Do, 22 Okt 2009) | 1 line
Add a new directive marking up implementation details and start using it.
........
r75600 | georg.brandl | 2009-10-22 13:01:46 +0200 (Do, 22 Okt 2009) | 1 line
Make it more robust.
........
r75602 | georg.brandl | 2009-10-22 13:28:06 +0200 (Do, 22 Okt 2009) | 1 line
Document new directive.
........
r75603 | georg.brandl | 2009-10-22 13:28:23 +0200 (Do, 22 Okt 2009) | 1 line
Allow short form with text as argument.
........
r75605 | georg.brandl | 2009-10-22 13:48:10 +0200 (Do, 22 Okt 2009) | 1 line
Use "impl-detail" directive where applicable.
........
r75606 | georg.brandl | 2009-10-22 17:00:06 +0200 (Do, 22 Okt 2009) | 1 line
#6324: membership test tries iteration via __iter__.
........
r75607 | georg.brandl | 2009-10-22 17:04:09 +0200 (Do, 22 Okt 2009) | 1 line
#7088: document new functions in signal as Unix-only.
........
r75610 | georg.brandl | 2009-10-22 17:27:24 +0200 (Do, 22 Okt 2009) | 1 line
Reorder __slots__ fine print and add a clarification.
........
r75611 | georg.brandl | 2009-10-22 17:42:32 +0200 (Do, 22 Okt 2009) | 1 line
#7035: improve docs of the various <method>_errors() functions, and give them docstrings.
........
r75612 | georg.brandl | 2009-10-22 17:52:15 +0200 (Do, 22 Okt 2009) | 1 line
#7156: document curses as Unix-only.
........
r75613 | georg.brandl | 2009-10-22 17:54:35 +0200 (Do, 22 Okt 2009) | 1 line
#6977: getopt does not support optional option arguments.
........
r75616 | georg.brandl | 2009-10-22 18:17:05 +0200 (Do, 22 Okt 2009) | 1 line
Add proper references.
........
r75617 | georg.brandl | 2009-10-22 18:20:55 +0200 (Do, 22 Okt 2009) | 1 line
Make printout margin important.
........
r75623 | georg.brandl | 2009-10-23 10:14:44 +0200 (Fr, 23 Okt 2009) | 1 line
#7188: fix optionxform() docs.
........
r75627 | fred.drake | 2009-10-23 15:04:51 +0200 (Fr, 23 Okt 2009) | 2 lines
add further note about what's passed to optionxform
........
r75647 | georg.brandl | 2009-10-24 12:04:19 +0200 (Sa, 24 Okt 2009) | 1 line
Fix markup.
........
2009-10-27 12:08:27 -03:00
|
|
|
long options which should be supported. The leading ``'-``\ ``-'``
|
|
|
|
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']``,
|
|
|
|
the option :option:`--fo` will match as :option:`--foo`, but :option:`--f`
|
|
|
|
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
|
|
|
|
options (e.g., ``'-``\ ``-long-option'``), and the option argument as its
|
|
|
|
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.
|
|
|
|
|
|
|
|
If the first character of the option string is '+', or if the environment
|
Merged revisions 67571,67574-67576,67579-67581,67583,67591,67597,67608,67631 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r67571 | georg.brandl | 2008-12-05 10:13:45 +0100 (Fri, 05 Dec 2008) | 2 lines
Use markup.
........
r67574 | georg.brandl | 2008-12-05 10:25:32 +0100 (Fri, 05 Dec 2008) | 2 lines
#4441 followup: Add link to open() docs for Windows.
........
r67575 | georg.brandl | 2008-12-05 12:34:51 +0100 (Fri, 05 Dec 2008) | 2 lines
#4544: add `dedent` to textwrap.__all__.
........
r67576 | georg.brandl | 2008-12-05 13:09:41 +0100 (Fri, 05 Dec 2008) | 2 lines
#4529: fix parser's validation for try-except-finally statements.
........
r67579 | georg.brandl | 2008-12-05 16:29:39 +0100 (Fri, 05 Dec 2008) | 2 lines
#4517: add "special method" glossary entry and clarify when __getattribute__ is bypassed.
........
r67580 | georg.brandl | 2008-12-05 16:32:29 +0100 (Fri, 05 Dec 2008) | 2 lines
#4478: document that copyfile() can raise Error.
........
r67581 | georg.brandl | 2008-12-05 16:42:03 +0100 (Fri, 05 Dec 2008) | 2 lines
#3171: document that *slice are removed in 3k.
........
r67583 | georg.brandl | 2008-12-05 16:52:20 +0100 (Fri, 05 Dec 2008) | 4 lines
Move __import__ to the bottom of the functions list.
It doesn't make sense for such a fundamental document to have
the most obscure function listed at the top.
........
r67591 | georg.brandl | 2008-12-05 19:00:06 +0100 (Fri, 05 Dec 2008) | 2 lines
Followup to #4511: add link from decorator glossary entry to definition.
........
r67597 | georg.brandl | 2008-12-05 20:03:19 +0100 (Fri, 05 Dec 2008) | 2 lines
Remove confusing sentence part.
........
r67608 | georg.brandl | 2008-12-06 12:57:12 +0100 (Sat, 06 Dec 2008) | 2 lines
Follow-up to #4488: document PIPE and STDOUT properly.
........
r67631 | georg.brandl | 2008-12-07 12:54:07 +0100 (Sun, 07 Dec 2008) | 2 lines
Add link to the favicon to the docs.
........
2008-12-07 10:47:12 -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::
|
|
|
|
|
|
|
|
import getopt, sys
|
|
|
|
|
|
|
|
def main():
|
|
|
|
try:
|
|
|
|
opts, args = getopt.getopt(sys.argv[1:], "ho:v", ["help", "output="])
|
|
|
|
except getopt.GetoptError, err:
|
|
|
|
# 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()
|
|
|
|
|
|
|
|
|
|
|
|
.. seealso::
|
|
|
|
|
|
|
|
Module :mod:`optparse`
|
|
|
|
More object-oriented command line option parsing.
|
|
|
|
|