cinap_lenrekadd hg and python4bb9e2215 years agoHistory
154 lines · 5.7 KB · TeX
RawDownload
\section{\module{getopt} ---         Parser for command line options} \declaremodule{standard}{getopt}\modulesynopsis{Portable parser for command line options; support both                short and long option names.}  This module helps scripts to parse the command line arguments in\code{sys.argv}.It supports the same conventions as the \UNIX{} \cfunction{getopt()}function (including the special meanings of arguments of the form`\code{-}' and `\code{-}\code{-}').% That's to fool latex2html into leaving the two hyphens alone!Long options similar to those supported byGNU software may be used as well via an optional third argument.This module provides a single function and an exception: \begin{funcdesc}{getopt}{args, options\optional{, long_options}}Parses command line options and parameter list.  \var{args} is theargument list to be parsed, without the leading reference to therunning program. Typically, this means \samp{sys.argv[1:]}.\var{options} is the string of option letters that the script wants torecognize, with options that require an argument followed by a colon(\character{:}; i.e., the same format that \UNIX{}\cfunction{getopt()} uses). \note{Unlike GNU \cfunction{getopt()}, after a non-optionargument, all further arguments are considered also non-options.This is similar to the way non-GNU \UNIX{} systems work.} \var{long_options}, if specified, must be a list of strings with thenames of the long options which should be supported.  The leading\code{'-}\code{-'} characters should not be included in the optionname.  Long options which require an argument should be followed by anequal sign (\character{=}).  To accept only long options,\var{options} should be an empty string.  Long options on the commandline can be recognized so long as they provide a prefix of the optionname that matches exactly one of the accepted options.  For example,if \var{long_options} is \code{['foo', 'frob']}, the option\longprogramopt{fo} will match as \longprogramopt{foo}, but\longprogramopt{f} will not match uniquely, so \exception{GetoptError}will be raised. The return value consists of two elements: the first is a list of\code{(\var{option}, \var{value})} pairs; the second is the list ofprogram arguments left after the option list was stripped (this is atrailing slice of \var{args}).  Each option-and-value pair returnedhas the option as its first element, prefixed with a hyphen for shortoptions (e.g., \code{'-x'}) or two hyphens for long options (e.g.,\code{'-}\code{-long-option'}), and the option argument as its secondelement, or an empty string if the option has no argument.  Theoptions occur in the list in the same order in which they were found,thus allowing multiple occurrences.  Long and short options may bemixed.\end{funcdesc} \begin{funcdesc}{gnu_getopt}{args, options\optional{, long_options}}This function works like \function{getopt()}, except that GNU stylescanning mode is used by default. This means that option andnon-option arguments may be intermixed. The \function{getopt()}function stops processing options as soon as a non-option argument isencountered. If the first character of the option string is `+', or if theenvironment variable POSIXLY_CORRECT is set, then option processingstops as soon as a non-option argument is encountered. \versionadded{2.3}\end{funcdesc} \begin{excdesc}{GetoptError}This is raised when an unrecognized option is found in the argumentlist or when an option requiring an argument is given none.The argument to the exception is a string indicating the cause of theerror.  For long options, an argument given to an option which doesnot require one will also cause this exception to be raised.  Theattributes \member{msg} and \member{opt} give the error message andrelated option; if there is no specific option to which the exceptionrelates, \member{opt} is an empty string. \versionchanged[Introduced \exception{GetoptError} as a synonym for                \exception{error}]{1.6}\end{excdesc} \begin{excdesc}{error}Alias for \exception{GetoptError}; for backward compatibility.\end{excdesc}  An example using only \UNIX{} style options: \begin{verbatim}>>> 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']\end{verbatim} Using long option names is equally easy: \begin{verbatim}>>> 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[('--condition', 'foo'), ('--testing', ''), ('--output-file', 'abc.def'), ('-x', '')]>>> args['a1', 'a2']\end{verbatim} In a script, typical usage is something like this: \begin{verbatim}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()\end{verbatim} \begin{seealso}  \seemodule{optparse}{More object-oriented command line option parsing.}\end{seealso}