blob: 0b476384398c68c629b1f9d98556e7e11e6676ce [file] [log] [blame]
Greg Wardc5221e12006-06-10 16:40:01 +00001% THIS FILE IS AUTO-GENERATED! DO NOT EDIT!
2% (Your changes will be lost the next time it is generated.)
Greg Wardb6f7fb72004-09-28 01:30:23 +00003\section{\module{optparse} --- More powerful command line option parser}
Neal Norwitz488609e2003-01-06 16:51:37 +00004\declaremodule{standard}{optparse}
5\moduleauthor{Greg Ward}{gward@python.net}
Greg Wardb6f7fb72004-09-28 01:30:23 +00006\modulesynopsis{More convenient, flexible, and powerful command-line parsing library.}
Neal Norwitz488609e2003-01-06 16:51:37 +00007\versionadded{2.3}
Greg Wardb6f7fb72004-09-28 01:30:23 +00008\sectionauthor{Greg Ward}{gward@python.net}
9% An intro blurb used only when generating LaTeX docs for the Python
10% manual (based on README.txt).
Neal Norwitz488609e2003-01-06 16:51:37 +000011
Greg Wardb6f7fb72004-09-28 01:30:23 +000012\code{optparse} is a more convenient, flexible, and powerful library for
13parsing command-line options than \code{getopt}. \code{optparse} uses a more
14declarative style of command-line parsing: you create an instance of
15\class{OptionParser}, populate it with options, and parse the command line.
16\code{optparse} allows users to specify options in the conventional GNU/POSIX
17syntax, and additionally generates usage and help messages for you.
Neal Norwitz488609e2003-01-06 16:51:37 +000018
Greg Wardb6f7fb72004-09-28 01:30:23 +000019Here's an example of using \code{optparse} in a simple script:
Neal Norwitz488609e2003-01-06 16:51:37 +000020\begin{verbatim}
21from optparse import OptionParser
Greg Wardb6f7fb72004-09-28 01:30:23 +000022[...]
Neal Norwitz488609e2003-01-06 16:51:37 +000023parser = OptionParser()
24parser.add_option("-f", "--file", dest="filename",
25 help="write report to FILE", metavar="FILE")
26parser.add_option("-q", "--quiet",
Greg Ward1f535172003-05-03 20:13:08 +000027 action="store_false", dest="verbose", default=True,
Neal Norwitz488609e2003-01-06 16:51:37 +000028 help="don't print status messages to stdout")
29
Greg Wardb6f7fb72004-09-28 01:30:23 +000030(options, args) = parser.parse_args()
Neal Norwitz488609e2003-01-06 16:51:37 +000031\end{verbatim}
32
33With these few lines of code, users of your script can now do the
Greg Wardb6f7fb72004-09-28 01:30:23 +000034``usual thing'' on the command-line, for example:
Neal Norwitz488609e2003-01-06 16:51:37 +000035\begin{verbatim}
Greg Wardb6f7fb72004-09-28 01:30:23 +000036<yourscript> --file=outfile -q
Neal Norwitz488609e2003-01-06 16:51:37 +000037\end{verbatim}
38
Greg Wardb6f7fb72004-09-28 01:30:23 +000039As it parses the command line, \code{optparse} sets attributes of the
Greg Wardab05edc2006-04-23 03:47:58 +000040\code{options} object returned by \method{parse{\_}args()} based on user-supplied
Greg Wardb6f7fb72004-09-28 01:30:23 +000041command-line values. When \method{parse{\_}args()} returns from parsing this
Greg Wardab05edc2006-04-23 03:47:58 +000042command line, \code{options.filename} will be \code{"outfile"} and
Greg Wardb6f7fb72004-09-28 01:30:23 +000043\code{options.verbose} will be \code{False}. \code{optparse} supports both long
44and short options, allows short options to be merged together, and
45allows options to be associated with their arguments in a variety of
46ways. Thus, the following command lines are all equivalent to the above
47example:
Neal Norwitz488609e2003-01-06 16:51:37 +000048\begin{verbatim}
Greg Wardb6f7fb72004-09-28 01:30:23 +000049<yourscript> -f outfile --quiet
50<yourscript> --quiet --file outfile
51<yourscript> -q -foutfile
52<yourscript> -qfoutfile
Neal Norwitz488609e2003-01-06 16:51:37 +000053\end{verbatim}
Greg Wardb6f7fb72004-09-28 01:30:23 +000054
55Additionally, users can run one of
56\begin{verbatim}
57<yourscript> -h
58<yourscript> --help
59\end{verbatim}
60
61and \code{optparse} will print out a brief summary of your script's
Neal Norwitz488609e2003-01-06 16:51:37 +000062options:
Neal Norwitz488609e2003-01-06 16:51:37 +000063\begin{verbatim}
64usage: <yourscript> [options]
65
66options:
Greg Wardb6f7fb72004-09-28 01:30:23 +000067 -h, --help show this help message and exit
68 -f FILE, --file=FILE write report to FILE
69 -q, --quiet don't print status messages to stdout
Neal Norwitz488609e2003-01-06 16:51:37 +000070\end{verbatim}
71
Greg Wardb6f7fb72004-09-28 01:30:23 +000072where the value of \emph{yourscript} is determined at runtime (normally
73from \code{sys.argv{[}0]}).
Greg Warde644a1b2004-10-01 01:16:39 +000074% $Id: intro.txt 413 2004-09-28 00:59:13Z greg $
Neal Norwitz488609e2003-01-06 16:51:37 +000075
Neal Norwitz488609e2003-01-06 16:51:37 +000076
Greg Wardb6f7fb72004-09-28 01:30:23 +000077\subsection{Background\label{optparse-background}}
78
79\module{optparse} was explicitly designed to encourage the creation of programs with
80straightforward, conventional command-line interfaces. To that end, it
81supports only the most common command-line syntax and semantics
82conventionally used under \UNIX{}. If you are unfamiliar with these
83conventions, read this section to acquaint yourself with them.
84
Neal Norwitz488609e2003-01-06 16:51:37 +000085
86\subsubsection{Terminology\label{optparse-terminology}}
Greg Wardb6f7fb72004-09-28 01:30:23 +000087\begin{description}
88\item[argument]
89a string entered on the command-line, and passed by the shell to
90\code{execl()} or \code{execv()}. In Python, arguments are elements of
91\code{sys.argv{[}1:]} (\code{sys.argv{[}0]} is the name of the program being
92executed). \UNIX{} shells also use the term ``word''.
Neal Norwitz488609e2003-01-06 16:51:37 +000093
Greg Wardb6f7fb72004-09-28 01:30:23 +000094It is occasionally desirable to substitute an argument list other
95than \code{sys.argv{[}1:]}, so you should read ``argument'' as ``an element of
96\code{sys.argv{[}1:]}, or of some other list provided as a substitute for
97\code{sys.argv{[}1:]}''.
98\item[option ]
99an argument used to supply extra information to guide or customize the
100execution of a program. There are many different syntaxes for
101options; the traditional \UNIX{} syntax is a hyphen (``-'') followed by a
102single letter, e.g. \code{"-x"} or \code{"-F"}. Also, traditional \UNIX{}
103syntax allows multiple options to be merged into a single argument,
104e.g. \code{"-x -F"} is equivalent to \code{"-xF"}. The GNU project
Georg Brandlcdceeb82007-09-24 17:56:12 +0000105introduced a double hyphen followed by a series of hyphen-separated words,
106e.g. \longprogramopt{file} or \longprogramopt{dry-run}. These are the only two option
Greg Wardb6f7fb72004-09-28 01:30:23 +0000107syntaxes provided by \module{optparse}.
Neal Norwitz488609e2003-01-06 16:51:37 +0000108
Greg Wardb6f7fb72004-09-28 01:30:23 +0000109Some other option syntaxes that the world has seen include:
Neal Norwitz488609e2003-01-06 16:51:37 +0000110\begin{itemize}
Greg Wardb6f7fb72004-09-28 01:30:23 +0000111\item {}
112a hyphen followed by a few letters, e.g. \code{"-pf"} (this is
113\emph{not} the same as multiple options merged into a single argument)
114
115\item {}
116a hyphen followed by a whole word, e.g. \code{"-file"} (this is
117technically equivalent to the previous syntax, but they aren't
118usually seen in the same program)
119
120\item {}
121a plus sign followed by a single letter, or a few letters,
122or a word, e.g. \code{"+f"}, \code{"+rgb"}
123
124\item {}
125a slash followed by a letter, or a few letters, or a word, e.g.
126\code{"/f"}, \code{"/file"}
127
Neal Norwitz488609e2003-01-06 16:51:37 +0000128\end{itemize}
129
Greg Wardb6f7fb72004-09-28 01:30:23 +0000130These option syntaxes are not supported by \module{optparse}, and they never will
131be. This is deliberate: the first three are non-standard on any
132environment, and the last only makes sense if you're exclusively
133targeting VMS, MS-DOS, and/or Windows.
134\item[option argument]
Neal Norwitz488609e2003-01-06 16:51:37 +0000135an argument that follows an option, is closely associated with that
Greg Wardb6f7fb72004-09-28 01:30:23 +0000136option, and is consumed from the argument list when that option is.
137With \module{optparse}, option arguments may either be in a separate argument
138from their option:
Neal Norwitz488609e2003-01-06 16:51:37 +0000139\begin{verbatim}
Greg Wardb6f7fb72004-09-28 01:30:23 +0000140-f foo
141--file foo
Neal Norwitz488609e2003-01-06 16:51:37 +0000142\end{verbatim}
143
Greg Wardb6f7fb72004-09-28 01:30:23 +0000144or included in the same argument:
Neal Norwitz488609e2003-01-06 16:51:37 +0000145\begin{verbatim}
Greg Wardb6f7fb72004-09-28 01:30:23 +0000146-ffoo
147--file=foo
Neal Norwitz488609e2003-01-06 16:51:37 +0000148\end{verbatim}
149
Greg Wardb6f7fb72004-09-28 01:30:23 +0000150Typically, a given option either takes an argument or it doesn't.
151Lots of people want an ``optional option arguments'' feature, meaning
152that some options will take an argument if they see it, and won't if
153they don't. This is somewhat controversial, because it makes parsing
154ambiguous: if \code{"-a"} takes an optional argument and \code{"-b"} is
155another option entirely, how do we interpret \code{"-ab"}? Because of
156this ambiguity, \module{optparse} does not support this feature.
157\item[positional argument]
Neal Norwitz488609e2003-01-06 16:51:37 +0000158something leftover in the argument list after options have been
Greg Wardb6f7fb72004-09-28 01:30:23 +0000159parsed, i.e. after options and their arguments have been parsed and
Neal Norwitz488609e2003-01-06 16:51:37 +0000160removed from the argument list.
Greg Wardb6f7fb72004-09-28 01:30:23 +0000161\item[required option]
162an option that must be supplied on the command-line; note that the
163phrase ``required option'' is self-contradictory in English. \module{optparse}
164doesn't prevent you from implementing required options, but doesn't
165give you much help at it either. See \code{examples/required{\_}1.py} and
166\code{examples/required{\_}2.py} in the \module{optparse} source distribution for two
167ways to implement required options with \module{optparse}.
168\end{description}
Neal Norwitz488609e2003-01-06 16:51:37 +0000169
170For example, consider this hypothetical command-line:
Neal Norwitz488609e2003-01-06 16:51:37 +0000171\begin{verbatim}
Greg Wardb6f7fb72004-09-28 01:30:23 +0000172prog -v --report /tmp/report.txt foo bar
Neal Norwitz488609e2003-01-06 16:51:37 +0000173\end{verbatim}
174
Georg Brandlcdceeb82007-09-24 17:56:12 +0000175\programopt{-v} and \longprogramopt{report} are both options. Assuming that
Greg Wardb6f7fb72004-09-28 01:30:23 +0000176\longprogramopt{report} takes one argument, \code{"/tmp/report.txt"} is an option
177argument. \code{"foo"} and \code{"bar"} are positional arguments.
Neal Norwitz488609e2003-01-06 16:51:37 +0000178
Greg Wardb6f7fb72004-09-28 01:30:23 +0000179
Greg Warde644a1b2004-10-01 01:16:39 +0000180\subsubsection{What are options for?\label{optparse-what-options-for}}
Neal Norwitz488609e2003-01-06 16:51:37 +0000181
182Options are used to provide extra information to tune or customize the
Greg Wardb6f7fb72004-09-28 01:30:23 +0000183execution of a program. In case it wasn't clear, options are usually
184\emph{optional}. A program should be able to run just fine with no options
185whatsoever. (Pick a random program from the \UNIX{} or GNU toolsets. Can
186it run without any options at all and still make sense? The main
187exceptions are \code{find}, \code{tar}, and \code{dd}{---}all of which are mutant
188oddballs that have been rightly criticized for their non-standard syntax
189and confusing interfaces.)
Neal Norwitz488609e2003-01-06 16:51:37 +0000190
Greg Wardb6f7fb72004-09-28 01:30:23 +0000191Lots of people want their programs to have ``required options''. Think
192about it. If it's required, then it's \emph{not optional}! If there is a
193piece of information that your program absolutely requires in order to
194run successfully, that's what positional arguments are for.
Neal Norwitz488609e2003-01-06 16:51:37 +0000195
Greg Wardb6f7fb72004-09-28 01:30:23 +0000196As an example of good command-line interface design, consider the humble
197\code{cp} utility, for copying files. It doesn't make much sense to try to
198copy files without supplying a destination and at least one source.
199Hence, \code{cp} fails if you run it with no arguments. However, it has a
200flexible, useful syntax that does not require any options at all:
Neal Norwitz488609e2003-01-06 16:51:37 +0000201\begin{verbatim}
Greg Wardb6f7fb72004-09-28 01:30:23 +0000202cp SOURCE DEST
203cp SOURCE ... DEST-DIR
Neal Norwitz488609e2003-01-06 16:51:37 +0000204\end{verbatim}
205
Greg Wardb6f7fb72004-09-28 01:30:23 +0000206You can get pretty far with just that. Most \code{cp} implementations
207provide a bunch of options to tweak exactly how the files are copied:
208you can preserve mode and modification time, avoid following symlinks,
209ask before clobbering existing files, etc. But none of this distracts
210from the core mission of \code{cp}, which is to copy either one file to
211another, or several files to another directory.
Neal Norwitz488609e2003-01-06 16:51:37 +0000212
Neal Norwitz488609e2003-01-06 16:51:37 +0000213
Greg Warde644a1b2004-10-01 01:16:39 +0000214\subsubsection{What are positional arguments for?\label{optparse-what-positional-arguments-for}}
Greg Wardb6f7fb72004-09-28 01:30:23 +0000215
216Positional arguments are for those pieces of information that your
217program absolutely, positively requires to run.
Neal Norwitz488609e2003-01-06 16:51:37 +0000218
219A good user interface should have as few absolute requirements as
220possible. If your program requires 17 distinct pieces of information in
221order to run successfully, it doesn't much matter \emph{how} you get that
Greg Wardb6f7fb72004-09-28 01:30:23 +0000222information from the user{---}most people will give up and walk away
Neal Norwitz488609e2003-01-06 16:51:37 +0000223before they successfully run the program. This applies whether the user
Greg Wardb6f7fb72004-09-28 01:30:23 +0000224interface is a command-line, a configuration file, or a GUI: if you make
225that many demands on your users, most of them will simply give up.
Neal Norwitz488609e2003-01-06 16:51:37 +0000226
227In short, try to minimize the amount of information that users are
Greg Wardb6f7fb72004-09-28 01:30:23 +0000228absolutely required to supply{---}use sensible defaults whenever
Neal Norwitz488609e2003-01-06 16:51:37 +0000229possible. Of course, you also want to make your programs reasonably
230flexible. That's what options are for. Again, it doesn't matter if
Greg Wardb6f7fb72004-09-28 01:30:23 +0000231they are entries in a config file, widgets in the ``Preferences'' dialog
232of a GUI, or command-line options{---}the more options you implement, the
233more flexible your program is, and the more complicated its
234implementation becomes. Too much flexibility has drawbacks as well, of
235course; too many options can overwhelm users and make your code much
236harder to maintain.
Greg Warde644a1b2004-10-01 01:16:39 +0000237% $Id: tao.txt 413 2004-09-28 00:59:13Z greg $
Neal Norwitz488609e2003-01-06 16:51:37 +0000238
Neal Norwitz488609e2003-01-06 16:51:37 +0000239
Greg Wardb6f7fb72004-09-28 01:30:23 +0000240\subsection{Tutorial\label{optparse-tutorial}}
Neal Norwitz488609e2003-01-06 16:51:37 +0000241
Greg Wardb6f7fb72004-09-28 01:30:23 +0000242While \module{optparse} is quite flexible and powerful, it's also straightforward to
243use in most cases. This section covers the code patterns that are
244common to any \module{optparse}-based program.
Neal Norwitz488609e2003-01-06 16:51:37 +0000245
Greg Wardb6f7fb72004-09-28 01:30:23 +0000246First, you need to import the OptionParser class; then, early in the
247main program, create an OptionParser instance:
Neal Norwitz488609e2003-01-06 16:51:37 +0000248\begin{verbatim}
249from optparse import OptionParser
Greg Wardb6f7fb72004-09-28 01:30:23 +0000250[...]
Neal Norwitz488609e2003-01-06 16:51:37 +0000251parser = OptionParser()
252\end{verbatim}
253
Greg Wardb6f7fb72004-09-28 01:30:23 +0000254Then you can start defining options. The basic syntax is:
255\begin{verbatim}
256parser.add_option(opt_str, ...,
257 attr=value, ...)
258\end{verbatim}
Neal Norwitz488609e2003-01-06 16:51:37 +0000259
Georg Brandlcdceeb82007-09-24 17:56:12 +0000260Each option has one or more option strings, such as \programopt{-f} or
261\longprogramopt{file}, and several option attributes that tell \module{optparse} what to
Greg Wardb6f7fb72004-09-28 01:30:23 +0000262expect and what to do when it encounters that option on the command
263line.
264
265Typically, each option will have one short option string and one long
266option string, e.g.:
Neal Norwitz488609e2003-01-06 16:51:37 +0000267\begin{verbatim}
268parser.add_option("-f", "--file", ...)
269\end{verbatim}
270
Greg Wardb6f7fb72004-09-28 01:30:23 +0000271You're free to define as many short option strings and as many long
272option strings as you like (including zero), as long as there is at
273least one option string overall.
Neal Norwitz488609e2003-01-06 16:51:37 +0000274
Greg Wardb6f7fb72004-09-28 01:30:23 +0000275The option strings passed to \method{add{\_}option()} are effectively labels for
276the option defined by that call. For brevity, we will frequently refer
277to \emph{encountering an option} on the command line; in reality, \module{optparse}
278encounters \emph{option strings} and looks up options from them.
Neal Norwitz488609e2003-01-06 16:51:37 +0000279
Greg Wardb6f7fb72004-09-28 01:30:23 +0000280Once all of your options are defined, instruct \module{optparse} to parse your
281program's command line:
282\begin{verbatim}
283(options, args) = parser.parse_args()
284\end{verbatim}
Neal Norwitz488609e2003-01-06 16:51:37 +0000285
Greg Wardb6f7fb72004-09-28 01:30:23 +0000286(If you like, you can pass a custom argument list to \method{parse{\_}args()},
287but that's rarely necessary: by default it uses \code{sys.argv{[}1:]}.)
Neal Norwitz488609e2003-01-06 16:51:37 +0000288
Greg Wardb6f7fb72004-09-28 01:30:23 +0000289\method{parse{\_}args()} returns two values:
290\begin{itemize}
291\item {}
Georg Brandlcdceeb82007-09-24 17:56:12 +0000292\code{options}, an object containing values for all of your options{---}e.g. if \longprogramopt{file} takes a single string argument, then
Greg Wardab05edc2006-04-23 03:47:58 +0000293\code{options.file} will be the filename supplied by the user, or
Greg Wardb6f7fb72004-09-28 01:30:23 +0000294\code{None} if the user did not supply that option
295
296\item {}
Greg Wardab05edc2006-04-23 03:47:58 +0000297\code{args}, the list of positional arguments leftover after parsing
Greg Wardb6f7fb72004-09-28 01:30:23 +0000298options
299
300\end{itemize}
301
302This tutorial section only covers the four most important option
303attributes: \member{action}, \member{type}, \member{dest} (destination), and \member{help}.
304Of these, \member{action} is the most fundamental.
305
306
Greg Warde644a1b2004-10-01 01:16:39 +0000307\subsubsection{Understanding option actions\label{optparse-understanding-option-actions}}
Greg Wardb6f7fb72004-09-28 01:30:23 +0000308
309Actions tell \module{optparse} what to do when it encounters an option on the
310command line. There is a fixed set of actions hard-coded into \module{optparse};
Greg Wardc5221e12006-06-10 16:40:01 +0000311adding new actions is an advanced topic covered in section~\ref{optparse-extending-optparse}, Extending \module{optparse}.
Greg Wardb6f7fb72004-09-28 01:30:23 +0000312Most actions tell \module{optparse} to store a value in some variable{---}for
313example, take a string from the command line and store it in an
Greg Wardab05edc2006-04-23 03:47:58 +0000314attribute of \code{options}.
Greg Wardb6f7fb72004-09-28 01:30:23 +0000315
316If you don't specify an option action, \module{optparse} defaults to \code{store}.
317
318
Greg Warde644a1b2004-10-01 01:16:39 +0000319\subsubsection{The store action\label{optparse-store-action}}
Greg Wardb6f7fb72004-09-28 01:30:23 +0000320
321The most common option action is \code{store}, which tells \module{optparse} to take
322the next argument (or the remainder of the current argument), ensure
323that it is of the correct type, and store it to your chosen destination.
324
325For example:
Neal Norwitz488609e2003-01-06 16:51:37 +0000326\begin{verbatim}
327parser.add_option("-f", "--file",
328 action="store", type="string", dest="filename")
329\end{verbatim}
330
Greg Wardb6f7fb72004-09-28 01:30:23 +0000331Now let's make up a fake command line and ask \module{optparse} to parse it:
Neal Norwitz488609e2003-01-06 16:51:37 +0000332\begin{verbatim}
333args = ["-f", "foo.txt"]
Greg Wardb6f7fb72004-09-28 01:30:23 +0000334(options, args) = parser.parse_args(args)
Neal Norwitz488609e2003-01-06 16:51:37 +0000335\end{verbatim}
336
Greg Wardb6f7fb72004-09-28 01:30:23 +0000337When \module{optparse} sees the option string \code{"-f"}, it consumes the next
Greg Wardab05edc2006-04-23 03:47:58 +0000338argument, \code{"foo.txt"}, and stores it in \code{options.filename}. So,
339after this call to \method{parse{\_}args()}, \code{options.filename} is
Greg Wardb6f7fb72004-09-28 01:30:23 +0000340\code{"foo.txt"}.
Neal Norwitz488609e2003-01-06 16:51:37 +0000341
Greg Wardb6f7fb72004-09-28 01:30:23 +0000342Some other option types supported by \module{optparse} are \code{int} and \code{float}.
343Here's an option that expects an integer argument:
Neal Norwitz488609e2003-01-06 16:51:37 +0000344\begin{verbatim}
345parser.add_option("-n", type="int", dest="num")
346\end{verbatim}
347
Greg Wardb6f7fb72004-09-28 01:30:23 +0000348Note that this option has no long option string, which is perfectly
349acceptable. Also, there's no explicit action, since the default is
350\code{store}.
Neal Norwitz488609e2003-01-06 16:51:37 +0000351
Greg Wardb6f7fb72004-09-28 01:30:23 +0000352Let's parse another fake command-line. This time, we'll jam the option
353argument right up against the option: since \code{"-n42"} (one argument) is
354equivalent to \code{"-n 42"} (two arguments), the code
Neal Norwitz488609e2003-01-06 16:51:37 +0000355\begin{verbatim}
Greg Wardb6f7fb72004-09-28 01:30:23 +0000356(options, args) = parser.parse_args(["-n42"])
Neal Norwitz488609e2003-01-06 16:51:37 +0000357print options.num
358\end{verbatim}
359
Greg Wardb6f7fb72004-09-28 01:30:23 +0000360will print \code{"42"}.
Neal Norwitz488609e2003-01-06 16:51:37 +0000361
Greg Wardb6f7fb72004-09-28 01:30:23 +0000362If you don't specify a type, \module{optparse} assumes \code{string}. Combined with the
363fact that the default action is \code{store}, that means our first example
364can be a lot shorter:
Neal Norwitz488609e2003-01-06 16:51:37 +0000365\begin{verbatim}
366parser.add_option("-f", "--file", dest="filename")
367\end{verbatim}
368
Greg Wardb6f7fb72004-09-28 01:30:23 +0000369If you don't supply a destination, \module{optparse} figures out a sensible default
370from the option strings: if the first long option string is
Georg Brandlcdceeb82007-09-24 17:56:12 +0000371\longprogramopt{foo-bar}, then the default destination is \code{foo{\_}bar}. If there
Greg Wardb6f7fb72004-09-28 01:30:23 +0000372are no long option strings, \module{optparse} looks at the first short option
373string: the default destination for \code{"-f"} is \code{f}.
Neal Norwitz488609e2003-01-06 16:51:37 +0000374
Greg Wardb6f7fb72004-09-28 01:30:23 +0000375\module{optparse} also includes built-in \code{long} and \code{complex} types. Adding
Greg Wardc5221e12006-06-10 16:40:01 +0000376types is covered in section~\ref{optparse-extending-optparse}, Extending \module{optparse}.
Neal Norwitz488609e2003-01-06 16:51:37 +0000377
Neal Norwitz488609e2003-01-06 16:51:37 +0000378
Greg Warde644a1b2004-10-01 01:16:39 +0000379\subsubsection{Handling boolean (flag) options\label{optparse-handling-boolean-options}}
Neal Norwitz488609e2003-01-06 16:51:37 +0000380
Greg Wardb6f7fb72004-09-28 01:30:23 +0000381Flag options{---}set a variable to true or false when a particular option
382is seen{---}are quite common. \module{optparse} supports them with two separate
383actions, \code{store{\_}true} and \code{store{\_}false}. For example, you might have a
Greg Wardab05edc2006-04-23 03:47:58 +0000384\code{verbose} flag that is turned on with \code{"-v"} and off with \code{"-q"}:
Neal Norwitz488609e2003-01-06 16:51:37 +0000385\begin{verbatim}
386parser.add_option("-v", action="store_true", dest="verbose")
387parser.add_option("-q", action="store_false", dest="verbose")
388\end{verbatim}
389
390Here we have two different options with the same destination, which is
391perfectly OK. (It just means you have to be a bit careful when setting
Greg Warde644a1b2004-10-01 01:16:39 +0000392default values{---}see below.)
Neal Norwitz488609e2003-01-06 16:51:37 +0000393
Greg Wardb6f7fb72004-09-28 01:30:23 +0000394When \module{optparse} encounters \code{"-v"} on the command line, it sets
395\code{options.verbose} to \code{True}; when it encounters \code{"-q"},
396\code{options.verbose} is set to \code{False}.
Neal Norwitz488609e2003-01-06 16:51:37 +0000397
Greg Wardb6f7fb72004-09-28 01:30:23 +0000398
399\subsubsection{Other actions\label{optparse-other-actions}}
400
401Some other actions supported by \module{optparse} are:
402\begin{description}
403\item[\code{store{\_}const}]
404store a constant value
405\item[\code{append}]
406append this option's argument to a list
407\item[\code{count}]
408increment a counter by one
409\item[\code{callback}]
410call a specified function
411\end{description}
412
Greg Warde644a1b2004-10-01 01:16:39 +0000413These are covered in section~\ref{optparse-reference-guide}, Reference Guide and section~\ref{optparse-option-callbacks}, Option Callbacks.
Greg Wardb6f7fb72004-09-28 01:30:23 +0000414
415
416\subsubsection{Default values\label{optparse-default-values}}
Neal Norwitz488609e2003-01-06 16:51:37 +0000417
418All of the above examples involve setting some variable (the
Greg Wardb6f7fb72004-09-28 01:30:23 +0000419``destination'') when certain command-line options are seen. What happens
420if those options are never seen? Since we didn't supply any defaults,
421they are all set to \code{None}. This is usually fine, but sometimes you
422want more control. \module{optparse} lets you supply a default value for each
423destination, which is assigned before the command line is parsed.
Neal Norwitz488609e2003-01-06 16:51:37 +0000424
Greg Wardb6f7fb72004-09-28 01:30:23 +0000425First, consider the verbose/quiet example. If we want \module{optparse} to set
Greg Wardab05edc2006-04-23 03:47:58 +0000426\code{verbose} to \code{True} unless \code{"-q"} is seen, then we can do this:
Neal Norwitz488609e2003-01-06 16:51:37 +0000427\begin{verbatim}
Greg Ward1f535172003-05-03 20:13:08 +0000428parser.add_option("-v", action="store_true", dest="verbose", default=True)
Neal Norwitz488609e2003-01-06 16:51:37 +0000429parser.add_option("-q", action="store_false", dest="verbose")
430\end{verbatim}
431
Greg Wardb6f7fb72004-09-28 01:30:23 +0000432Since default values apply to the \emph{destination} rather than to any
433particular option, and these two options happen to have the same
434destination, this is exactly equivalent:
Neal Norwitz488609e2003-01-06 16:51:37 +0000435\begin{verbatim}
436parser.add_option("-v", action="store_true", dest="verbose")
Greg Ward1f535172003-05-03 20:13:08 +0000437parser.add_option("-q", action="store_false", dest="verbose", default=True)
Neal Norwitz488609e2003-01-06 16:51:37 +0000438\end{verbatim}
439
Neal Norwitz488609e2003-01-06 16:51:37 +0000440Consider this:
Neal Norwitz488609e2003-01-06 16:51:37 +0000441\begin{verbatim}
Greg Ward1f535172003-05-03 20:13:08 +0000442parser.add_option("-v", action="store_true", dest="verbose", default=False)
443parser.add_option("-q", action="store_false", dest="verbose", default=True)
Neal Norwitz488609e2003-01-06 16:51:37 +0000444\end{verbatim}
445
Greg Wardab05edc2006-04-23 03:47:58 +0000446Again, the default value for \code{verbose} will be \code{True}: the last
Greg Wardd7231282003-05-03 21:22:58 +0000447default value supplied for any particular destination is the one that
448counts.
Neal Norwitz488609e2003-01-06 16:51:37 +0000449
Greg Wardb6f7fb72004-09-28 01:30:23 +0000450A clearer way to specify default values is the \method{set{\_}defaults()}
451method of OptionParser, which you can call at any time before calling
452\method{parse{\_}args()}:
453\begin{verbatim}
454parser.set_defaults(verbose=True)
455parser.add_option(...)
456(options, args) = parser.parse_args()
457\end{verbatim}
458
459As before, the last value specified for a given option destination is
460the one that counts. For clarity, try to use one method or the other of
461setting default values, not both.
462
463
Neal Norwitz488609e2003-01-06 16:51:37 +0000464\subsubsection{Generating help\label{optparse-generating-help}}
465
Greg Wardb6f7fb72004-09-28 01:30:23 +0000466\module{optparse}'s ability to generate help and usage text automatically is useful
467for creating user-friendly command-line interfaces. All you have to do
468is supply a \member{help} value for each option, and optionally a short usage
469message for your whole program. Here's an OptionParser populated with
470user-friendly (documented) options:
Neal Norwitz488609e2003-01-06 16:51:37 +0000471\begin{verbatim}
472usage = "usage: %prog [options] arg1 arg2"
473parser = OptionParser(usage=usage)
474parser.add_option("-v", "--verbose",
Greg Ward1f535172003-05-03 20:13:08 +0000475 action="store_true", dest="verbose", default=True,
Neal Norwitz488609e2003-01-06 16:51:37 +0000476 help="make lots of noise [default]")
477parser.add_option("-q", "--quiet",
478 action="store_false", dest="verbose",
479 help="be vewwy quiet (I'm hunting wabbits)")
Greg Wardb6f7fb72004-09-28 01:30:23 +0000480parser.add_option("-f", "--filename",
Neal Norwitz488609e2003-01-06 16:51:37 +0000481 metavar="FILE", help="write output to FILE"),
482parser.add_option("-m", "--mode",
483 default="intermediate",
Greg Wardb6f7fb72004-09-28 01:30:23 +0000484 help="interaction mode: novice, intermediate, "
485 "or expert [default: %default]")
Neal Norwitz488609e2003-01-06 16:51:37 +0000486\end{verbatim}
487
Georg Brandlcdceeb82007-09-24 17:56:12 +0000488If \module{optparse} encounters either \programopt{-h} or \longprogramopt{help} on the command-line,
Greg Wardb6f7fb72004-09-28 01:30:23 +0000489or if you just call \method{parser.print{\_}help()}, it prints the following to
490standard output:
Neal Norwitz488609e2003-01-06 16:51:37 +0000491\begin{verbatim}
492usage: <yourscript> [options] arg1 arg2
493
494options:
Greg Wardb6f7fb72004-09-28 01:30:23 +0000495 -h, --help show this help message and exit
496 -v, --verbose make lots of noise [default]
497 -q, --quiet be vewwy quiet (I'm hunting wabbits)
498 -f FILE, --filename=FILE
499 write output to FILE
500 -m MODE, --mode=MODE interaction mode: novice, intermediate, or
501 expert [default: intermediate]
Neal Norwitz488609e2003-01-06 16:51:37 +0000502\end{verbatim}
503
Greg Wardb6f7fb72004-09-28 01:30:23 +0000504(If the help output is triggered by a help option, \module{optparse} exits after
505printing the help text.)
Neal Norwitz488609e2003-01-06 16:51:37 +0000506
Greg Wardb6f7fb72004-09-28 01:30:23 +0000507There's a lot going on here to help \module{optparse} generate the best possible
508help message:
Neal Norwitz488609e2003-01-06 16:51:37 +0000509\begin{itemize}
Greg Wardb6f7fb72004-09-28 01:30:23 +0000510\item {}
511the script defines its own usage message:
Neal Norwitz488609e2003-01-06 16:51:37 +0000512\begin{verbatim}
513usage = "usage: %prog [options] arg1 arg2"
514\end{verbatim}
515
Greg Wardb6f7fb72004-09-28 01:30:23 +0000516\module{optparse} expands \code{"{\%}prog"} in the usage string to the name of the current
517program, i.e. \code{os.path.basename(sys.argv{[}0])}. The expanded string
518is then printed before the detailed option help.
Neal Norwitz488609e2003-01-06 16:51:37 +0000519
Greg Wardb6f7fb72004-09-28 01:30:23 +0000520If you don't supply a usage string, \module{optparse} uses a bland but sensible
521default: ``\code{usage: {\%}prog {[}options]"}, which is fine if your script
522doesn't take any positional arguments.
Neal Norwitz488609e2003-01-06 16:51:37 +0000523
Greg Wardb6f7fb72004-09-28 01:30:23 +0000524\item {}
525every option defines a help string, and doesn't worry about line-
526wrapping{---}\module{optparse} takes care of wrapping lines and making the
527help output look good.
Neal Norwitz488609e2003-01-06 16:51:37 +0000528
Greg Wardb6f7fb72004-09-28 01:30:23 +0000529\item {}
530options that take a value indicate this fact in their
Neal Norwitz488609e2003-01-06 16:51:37 +0000531automatically-generated help message, e.g. for the ``mode'' option:
Neal Norwitz488609e2003-01-06 16:51:37 +0000532\begin{verbatim}
Greg Wardb6f7fb72004-09-28 01:30:23 +0000533-m MODE, --mode=MODE
Neal Norwitz488609e2003-01-06 16:51:37 +0000534\end{verbatim}
535
536Here, ``MODE'' is called the meta-variable: it stands for the argument
Greg Wardb6f7fb72004-09-28 01:30:23 +0000537that the user is expected to supply to \programopt{-m}/\longprogramopt{mode}. By default,
538\module{optparse} converts the destination variable name to uppercase and uses
539that for the meta-variable. Sometimes, that's not what you want{---}for example, the \longprogramopt{filename} option explicitly sets
540\code{metavar="FILE"}, resulting in this automatically-generated option
541description:
Neal Norwitz488609e2003-01-06 16:51:37 +0000542\begin{verbatim}
Greg Wardb6f7fb72004-09-28 01:30:23 +0000543-f FILE, --filename=FILE
Neal Norwitz488609e2003-01-06 16:51:37 +0000544\end{verbatim}
545
546This is important for more than just saving space, though: the
Greg Wardb6f7fb72004-09-28 01:30:23 +0000547manually written help text uses the meta-variable ``FILE'' to clue the
548user in that there's a connection between the semi-formal syntax ``-f
549FILE'' and the informal semantic description ``write output to FILE''.
550This is a simple but effective way to make your help text a lot
551clearer and more useful for end users.
552
553\item {}
554options that have a default value can include \code{{\%}default} in
555the help string{---}\module{optparse} will replace it with \function{str()} of the
556option's default value. If an option has no default value (or the
557default value is \code{None}), \code{{\%}default} expands to \code{none}.
558
Neal Norwitz488609e2003-01-06 16:51:37 +0000559\end{itemize}
560
Andrew M. Kuchlingaf81c572008-01-19 21:01:39 +0000561When dealing with many options, it is convenient to group these
562options for better help output. An \class{OptionParser} can contain
563several option groups, each of which can contain several options.
564
565Continuing with the parser defined above, adding an
566\class{OptionGroup} to a parser is easy:
567
568\begin{verbatim}
569group = OptionGroup(parser, ``Dangerous Options'',
570 ``Caution: use these options at your own risk. ``
571 ``It is believed that some of them bite.'')
572group.add_option(``-g'', action=''store_true'', help=''Group option.'')
573parser.add_option_group(group)
574\end{verbatim}
575
576This would result in the following help output:
577
578\begin{verbatim}
579usage: [options] arg1 arg2
580
581options:
582 -h, --help show this help message and exit
583 -v, --verbose make lots of noise [default]
584 -q, --quiet be vewwy quiet (I'm hunting wabbits)
585 -fFILE, --file=FILE write output to FILE
586 -mMODE, --mode=MODE interaction mode: one of 'novice', 'intermediate'
587 [default], 'expert'
588
589 Dangerous Options:
590 Caution: use of these options is at your own risk. It is believed that
591 some of them bite.
592 -g Group option.
593\end{verbatim}
Fred Drakecf6d74a2003-04-18 15:50:13 +0000594
Greg Warde644a1b2004-10-01 01:16:39 +0000595\subsubsection{Printing a version string\label{optparse-printing-version-string}}
Fred Drakecf6d74a2003-04-18 15:50:13 +0000596
Greg Wardb6f7fb72004-09-28 01:30:23 +0000597Similar to the brief usage string, \module{optparse} can also print a version string
598for your program. You have to supply the string as the \code{version}
599argument to OptionParser:
Neal Norwitz488609e2003-01-06 16:51:37 +0000600\begin{verbatim}
601parser = OptionParser(usage="%prog [-f] [-q]", version="%prog 1.0")
602\end{verbatim}
603
Greg Wardc5221e12006-06-10 16:40:01 +0000604\code{"{\%}prog"} is expanded just like it is in \code{usage}. Apart
Greg Wardb6f7fb72004-09-28 01:30:23 +0000605from that, \code{version} can contain anything you like. When you supply
Georg Brandlcdceeb82007-09-24 17:56:12 +0000606it, \module{optparse} automatically adds a \longprogramopt{version} option to your parser.
Greg Wardb6f7fb72004-09-28 01:30:23 +0000607If it encounters this option on the command line, it expands your
608\code{version} string (by replacing \code{"{\%}prog"}), prints it to stdout, and
609exits.
Neal Norwitz488609e2003-01-06 16:51:37 +0000610
Greg Wardb6f7fb72004-09-28 01:30:23 +0000611For example, if your script is called \code{/usr/bin/foo}:
Neal Norwitz488609e2003-01-06 16:51:37 +0000612\begin{verbatim}
613$ /usr/bin/foo --version
614foo 1.0
Greg Wardb6f7fb72004-09-28 01:30:23 +0000615\end{verbatim}
616
Neal Norwitz488609e2003-01-06 16:51:37 +0000617
Greg Wardab05edc2006-04-23 03:47:58 +0000618\subsubsection{How \module{optparse} handles errors\label{optparse-how-optparse-handles-errors}}
Neal Norwitz488609e2003-01-06 16:51:37 +0000619
Greg Wardb6f7fb72004-09-28 01:30:23 +0000620There are two broad classes of errors that \module{optparse} has to worry about:
621programmer errors and user errors. Programmer errors are usually
Greg Wardab05edc2006-04-23 03:47:58 +0000622erroneous calls to \code{parser.add{\_}option()}, e.g. invalid option strings,
Greg Wardb6f7fb72004-09-28 01:30:23 +0000623unknown option attributes, missing option attributes, etc. These are
624dealt with in the usual way: raise an exception (either
Greg Wardab05edc2006-04-23 03:47:58 +0000625\code{optparse.OptionError} or \code{TypeError}) and let the program crash.
Neal Norwitz488609e2003-01-06 16:51:37 +0000626
Greg Wardb6f7fb72004-09-28 01:30:23 +0000627Handling user errors is much more important, since they are guaranteed
628to happen no matter how stable your code is. \module{optparse} can automatically
629detect some user errors, such as bad option arguments (passing \code{"-n
6304x"} where \programopt{-n} takes an integer argument), missing arguments
631(\code{"-n"} at the end of the command line, where \programopt{-n} takes an argument
632of any type). Also, you can call \code{parser.error()} to signal an
633application-defined error condition:
634\begin{verbatim}
635(options, args) = parser.parse_args()
636[...]
637if options.a and options.b:
638 parser.error("options -a and -b are mutually exclusive")
639\end{verbatim}
Neal Norwitz488609e2003-01-06 16:51:37 +0000640
Greg Wardb6f7fb72004-09-28 01:30:23 +0000641In either case, \module{optparse} handles the error the same way: it prints the
642program's usage message and an error message to standard error and
643exits with error status 2.
Neal Norwitz488609e2003-01-06 16:51:37 +0000644
Greg Wardb6f7fb72004-09-28 01:30:23 +0000645Consider the first example above, where the user passes \code{"4x"} to an
646option that takes an integer:
647\begin{verbatim}
648$ /usr/bin/foo -n 4x
649usage: foo [options]
Neal Norwitz488609e2003-01-06 16:51:37 +0000650
Greg Wardb6f7fb72004-09-28 01:30:23 +0000651foo: error: option -n: invalid integer value: '4x'
652\end{verbatim}
653
654Or, where the user fails to pass a value at all:
655\begin{verbatim}
656$ /usr/bin/foo -n
657usage: foo [options]
658
659foo: error: -n option requires an argument
660\end{verbatim}
661
662\module{optparse}-generated error messages take care always to mention the option
663involved in the error; be sure to do the same when calling
664\code{parser.error()} from your application code.
665
666If \module{optparse}'s default error-handling behaviour does not suite your needs,
667you'll need to subclass OptionParser and override \code{exit()} and/or
668\method{error()}.
669
670
671\subsubsection{Putting it all together\label{optparse-putting-it-all-together}}
672
673Here's what \module{optparse}-based scripts usually look like:
Neal Norwitz488609e2003-01-06 16:51:37 +0000674\begin{verbatim}
675from optparse import OptionParser
Greg Wardd7231282003-05-03 21:22:58 +0000676[...]
677def main():
Greg Wardb6f7fb72004-09-28 01:30:23 +0000678 usage = "usage: %prog [options] arg"
Neal Norwitz488609e2003-01-06 16:51:37 +0000679 parser = OptionParser(usage)
Greg Wardb6f7fb72004-09-28 01:30:23 +0000680 parser.add_option("-f", "--file", dest="filename",
Neal Norwitz488609e2003-01-06 16:51:37 +0000681 help="read data from FILENAME")
682 parser.add_option("-v", "--verbose",
683 action="store_true", dest="verbose")
684 parser.add_option("-q", "--quiet",
685 action="store_false", dest="verbose")
Greg Wardb6f7fb72004-09-28 01:30:23 +0000686 [...]
687 (options, args) = parser.parse_args()
688 if len(args) != 1:
Neal Norwitz488609e2003-01-06 16:51:37 +0000689 parser.error("incorrect number of arguments")
Neal Norwitz488609e2003-01-06 16:51:37 +0000690 if options.verbose:
Johannes Gijsbersc9c37ca2004-09-11 15:47:30 +0000691 print "reading %s..." % options.filename
Greg Wardb6f7fb72004-09-28 01:30:23 +0000692 [...]
Neal Norwitz488609e2003-01-06 16:51:37 +0000693
694if __name__ == "__main__":
695 main()
696\end{verbatim}
Greg Wardc5221e12006-06-10 16:40:01 +0000697% $Id: tutorial.txt 515 2006-06-10 15:37:45Z gward $
Neal Norwitz488609e2003-01-06 16:51:37 +0000698
Neal Norwitz488609e2003-01-06 16:51:37 +0000699
Greg Wardb6f7fb72004-09-28 01:30:23 +0000700\subsection{Reference Guide\label{optparse-reference-guide}}
Neal Norwitz488609e2003-01-06 16:51:37 +0000701
Neal Norwitz488609e2003-01-06 16:51:37 +0000702
Greg Wardab05edc2006-04-23 03:47:58 +0000703\subsubsection{Creating the parser\label{optparse-creating-parser}}
704
705The first step in using \module{optparse} is to create an OptionParser instance:
706\begin{verbatim}
707parser = OptionParser(...)
708\end{verbatim}
709
710The OptionParser constructor has no required arguments, but a number of
711optional keyword arguments. You should always pass them as keyword
712arguments, i.e. do not rely on the order in which the arguments are
713declared.
714\begin{quote}
715\begin{description}
716\item[\code{usage} (default: \code{"{\%}prog {[}options]"})]
717The usage summary to print when your program is run incorrectly or
718with a help option. When \module{optparse} prints the usage string, it expands
719\code{{\%}prog} to \code{os.path.basename(sys.argv{[}0])} (or to \code{prog} if
720you passed that keyword argument). To suppress a usage message,
721pass the special value \code{optparse.SUPPRESS{\_}USAGE}.
722\item[\code{option{\_}list} (default: \code{{[}]})]
723A list of Option objects to populate the parser with. The options
724in \code{option{\_}list} are added after any options in
725\code{standard{\_}option{\_}list} (a class attribute that may be set by
726OptionParser subclasses), but before any version or help options.
727Deprecated; use \method{add{\_}option()} after creating the parser instead.
728\item[\code{option{\_}class} (default: optparse.Option)]
729Class to use when adding options to the parser in \method{add{\_}option()}.
730\item[\code{version} (default: \code{None})]
731A version string to print when the user supplies a version option.
732If you supply a true value for \code{version}, \module{optparse} automatically adds
Georg Brandlcdceeb82007-09-24 17:56:12 +0000733a version option with the single option string \longprogramopt{version}. The
Greg Wardab05edc2006-04-23 03:47:58 +0000734substring \code{"{\%}prog"} is expanded the same as for \code{usage}.
735\item[\code{conflict{\_}handler} (default: \code{"error"})]
736Specifies what to do when options with conflicting option strings
737are added to the parser; see section~\ref{optparse-conflicts-between-options}, Conflicts between options.
738\item[\code{description} (default: \code{None})]
739A paragraph of text giving a brief overview of your program. \module{optparse}
740reformats this paragraph to fit the current terminal width and
741prints it when the user requests help (after \code{usage}, but before
742the list of options).
743\item[\code{formatter} (default: a new IndentedHelpFormatter)]
744An instance of optparse.HelpFormatter that will be used for
745printing help text. \module{optparse} provides two concrete classes for this
746purpose: IndentedHelpFormatter and TitledHelpFormatter.
747\item[\code{add{\_}help{\_}option} (default: \code{True})]
748If true, \module{optparse} will add a help option (with option strings \code{"-h"}
Georg Brandlcdceeb82007-09-24 17:56:12 +0000749and \longprogramopt{help}) to the parser.
Greg Wardab05edc2006-04-23 03:47:58 +0000750\item[\code{prog}]
751The string to use when expanding \code{"{\%}prog"} in \code{usage} and
752\code{version} instead of \code{os.path.basename(sys.argv{[}0])}.
753\end{description}
754\end{quote}
755
756
Greg Warde644a1b2004-10-01 01:16:39 +0000757\subsubsection{Populating the parser\label{optparse-populating-parser}}
Greg Wardb6f7fb72004-09-28 01:30:23 +0000758
759There are several ways to populate the parser with options. The
760preferred way is by using \code{OptionParser.add{\_}option()}, as shown in
Greg Warde644a1b2004-10-01 01:16:39 +0000761section~\ref{optparse-tutorial}, the tutorial. \method{add{\_}option()} can be called in one of two
Greg Wardb6f7fb72004-09-28 01:30:23 +0000762ways:
763\begin{itemize}
764\item {}
765pass it an Option instance (as returned by \function{make{\_}option()})
766
767\item {}
768pass it any combination of positional and keyword arguments that are
769acceptable to \function{make{\_}option()} (i.e., to the Option constructor),
770and it will create the Option instance for you
771
772\end{itemize}
773
774The other alternative is to pass a list of pre-constructed Option
775instances to the OptionParser constructor, as in:
Neal Norwitz488609e2003-01-06 16:51:37 +0000776\begin{verbatim}
Greg Wardb6f7fb72004-09-28 01:30:23 +0000777option_list = [
Neal Norwitz488609e2003-01-06 16:51:37 +0000778 make_option("-f", "--filename",
779 action="store", type="string", dest="filename"),
780 make_option("-q", "--quiet",
Greg Wardb6f7fb72004-09-28 01:30:23 +0000781 action="store_false", dest="verbose"),
782 ]
Neal Norwitz488609e2003-01-06 16:51:37 +0000783parser = OptionParser(option_list=option_list)
784\end{verbatim}
785
Greg Wardb6f7fb72004-09-28 01:30:23 +0000786(\function{make{\_}option()} is a factory function for creating Option instances;
787currently it is an alias for the Option constructor. A future version
788of \module{optparse} may split Option into several classes, and \function{make{\_}option()}
789will pick the right class to instantiate. Do not instantiate Option
790directly.)
Neal Norwitz488609e2003-01-06 16:51:37 +0000791
Neal Norwitz488609e2003-01-06 16:51:37 +0000792
793\subsubsection{Defining options\label{optparse-defining-options}}
794
Greg Wardb6f7fb72004-09-28 01:30:23 +0000795Each Option instance represents a set of synonymous command-line option
Greg Ward961eda72004-11-12 01:20:17 +0000796strings, e.g. \programopt{-f} and \longprogramopt{file}. You can
Greg Wardb6f7fb72004-09-28 01:30:23 +0000797specify any number of short or long option strings, but you must specify
798at least one overall option string.
799
Greg Wardab05edc2006-04-23 03:47:58 +0000800The canonical way to create an Option instance is with the
801\method{add{\_}option()} method of \class{OptionParser}:
Greg Wardb6f7fb72004-09-28 01:30:23 +0000802\begin{verbatim}
Greg Wardab05edc2006-04-23 03:47:58 +0000803parser.add_option(opt_str[, ...], attr=value, ...)
Greg Wardb6f7fb72004-09-28 01:30:23 +0000804\end{verbatim}
Neal Norwitz488609e2003-01-06 16:51:37 +0000805
806To define an option with only a short option string:
Neal Norwitz488609e2003-01-06 16:51:37 +0000807\begin{verbatim}
Greg Wardab05edc2006-04-23 03:47:58 +0000808parser.add_option("-f", attr=value, ...)
Neal Norwitz488609e2003-01-06 16:51:37 +0000809\end{verbatim}
810
811And to define an option with only a long option string:
Neal Norwitz488609e2003-01-06 16:51:37 +0000812\begin{verbatim}
Greg Wardab05edc2006-04-23 03:47:58 +0000813parser.add_option("--foo", attr=value, ...)
Neal Norwitz488609e2003-01-06 16:51:37 +0000814\end{verbatim}
815
Greg Wardab05edc2006-04-23 03:47:58 +0000816The keyword arguments define attributes of the new Option object. The
817most important option attribute is \member{action}, and it largely determines
818which other attributes are relevant or required. If you pass irrelevant
819option attributes, or fail to pass required ones, \module{optparse} raises an
820OptionError exception explaining your mistake.
Neal Norwitz488609e2003-01-06 16:51:37 +0000821
Greg Wardab05edc2006-04-23 03:47:58 +0000822An options's \emph{action} determines what \module{optparse} does when it encounters this
823option on the command-line. The standard option actions hard-coded into
824\module{optparse} are:
Greg Wardb6f7fb72004-09-28 01:30:23 +0000825\begin{description}
826\item[\code{store}]
Greg Wardab05edc2006-04-23 03:47:58 +0000827store this option's argument (default)
Greg Wardb6f7fb72004-09-28 01:30:23 +0000828\item[\code{store{\_}const}]
829store a constant value
830\item[\code{store{\_}true}]
831store a true value
832\item[\code{store{\_}false}]
833store a false value
834\item[\code{append}]
835append this option's argument to a list
Greg Wardab05edc2006-04-23 03:47:58 +0000836\item[\code{append{\_}const}]
837append a constant value to a list
Greg Wardb6f7fb72004-09-28 01:30:23 +0000838\item[\code{count}]
839increment a counter by one
840\item[\code{callback}]
841call a specified function
842\item[\member{help}]
843print a usage message including all options and the
844documentation for them
845\end{description}
Neal Norwitz488609e2003-01-06 16:51:37 +0000846
Greg Wardb6f7fb72004-09-28 01:30:23 +0000847(If you don't supply an action, the default is \code{store}. For this
848action, you may also supply \member{type} and \member{dest} option attributes; see
Neal Norwitz488609e2003-01-06 16:51:37 +0000849below.)
850
851As you can see, most actions involve storing or updating a value
Greg Wardab05edc2006-04-23 03:47:58 +0000852somewhere. \module{optparse} always creates a special object for this,
853conventionally called \code{options} (it happens to be an instance of
854\code{optparse.Values}). Option arguments (and various other values) are
855stored as attributes of this object, according to the \member{dest}
856(destination) option attribute.
Neal Norwitz488609e2003-01-06 16:51:37 +0000857
Greg Wardb6f7fb72004-09-28 01:30:23 +0000858For example, when you call
Neal Norwitz488609e2003-01-06 16:51:37 +0000859\begin{verbatim}
860parser.parse_args()
861\end{verbatim}
862
Greg Wardab05edc2006-04-23 03:47:58 +0000863one of the first things \module{optparse} does is create the \code{options} object:
Neal Norwitz488609e2003-01-06 16:51:37 +0000864\begin{verbatim}
Greg Wardb6f7fb72004-09-28 01:30:23 +0000865options = Values()
Neal Norwitz488609e2003-01-06 16:51:37 +0000866\end{verbatim}
867
Greg Wardb6f7fb72004-09-28 01:30:23 +0000868If one of the options in this parser is defined with
Neal Norwitz488609e2003-01-06 16:51:37 +0000869\begin{verbatim}
Greg Wardab05edc2006-04-23 03:47:58 +0000870parser.add_option("-f", "--file", action="store", type="string", dest="filename")
Neal Norwitz488609e2003-01-06 16:51:37 +0000871\end{verbatim}
872
873and the command-line being parsed includes any of the following:
Neal Norwitz488609e2003-01-06 16:51:37 +0000874\begin{verbatim}
875-ffoo
876-f foo
877--file=foo
878--file foo
879\end{verbatim}
880
Greg Wardab05edc2006-04-23 03:47:58 +0000881then \module{optparse}, on seeing this option, will do the equivalent of
Neal Norwitz488609e2003-01-06 16:51:37 +0000882\begin{verbatim}
Greg Wardb6f7fb72004-09-28 01:30:23 +0000883options.filename = "foo"
Neal Norwitz488609e2003-01-06 16:51:37 +0000884\end{verbatim}
885
Greg Wardb6f7fb72004-09-28 01:30:23 +0000886The \member{type} and \member{dest} option attributes are almost as important as
887\member{action}, but \member{action} is the only one that makes sense for \emph{all}
888options.
889
Neal Norwitz488609e2003-01-06 16:51:37 +0000890
Greg Warde644a1b2004-10-01 01:16:39 +0000891\subsubsection{Standard option actions\label{optparse-standard-option-actions}}
Neal Norwitz488609e2003-01-06 16:51:37 +0000892
Greg Wardb6f7fb72004-09-28 01:30:23 +0000893The various option actions all have slightly different requirements and
894effects. Most actions have several relevant option attributes which you
895may specify to guide \module{optparse}'s behaviour; a few have required attributes,
896which you must specify for any option using that action.
897\begin{itemize}
898\item {}
899\code{store} {[}relevant: \member{type}, \member{dest}, \code{nargs}, \code{choices}]
Neal Norwitz488609e2003-01-06 16:51:37 +0000900
Greg Wardb6f7fb72004-09-28 01:30:23 +0000901The option must be followed by an argument, which is
902converted to a value according to \member{type} and stored in
903\member{dest}. If \code{nargs} {\textgreater} 1, multiple arguments will be consumed
904from the command line; all will be converted according to
905\member{type} and stored to \member{dest} as a tuple. See the ``Option
906types'' section below.
Neal Norwitz488609e2003-01-06 16:51:37 +0000907
Greg Wardb6f7fb72004-09-28 01:30:23 +0000908If \code{choices} is supplied (a list or tuple of strings), the type
909defaults to \code{choice}.
Neal Norwitz488609e2003-01-06 16:51:37 +0000910
Greg Wardb6f7fb72004-09-28 01:30:23 +0000911If \member{type} is not supplied, it defaults to \code{string}.
Neal Norwitz488609e2003-01-06 16:51:37 +0000912
Greg Wardb6f7fb72004-09-28 01:30:23 +0000913If \member{dest} is not supplied, \module{optparse} derives a destination from the
Georg Brandlcdceeb82007-09-24 17:56:12 +0000914first long option string (e.g., \longprogramopt{foo-bar} implies \code{foo{\_}bar}).
Greg Wardb6f7fb72004-09-28 01:30:23 +0000915If there are no long option strings, \module{optparse} derives a destination from
916the first short option string (e.g., \code{"-f"} implies \code{f}).
Neal Norwitz488609e2003-01-06 16:51:37 +0000917
918Example:
Neal Norwitz488609e2003-01-06 16:51:37 +0000919\begin{verbatim}
Greg Wardb6f7fb72004-09-28 01:30:23 +0000920parser.add_option("-f")
921parser.add_option("-p", type="float", nargs=3, dest="point")
Neal Norwitz488609e2003-01-06 16:51:37 +0000922\end{verbatim}
923
Greg Wardb6f7fb72004-09-28 01:30:23 +0000924As it parses the command line
Neal Norwitz488609e2003-01-06 16:51:37 +0000925\begin{verbatim}
926-f foo.txt -p 1 -3.5 4 -fbar.txt
927\end{verbatim}
928
Greg Wardb6f7fb72004-09-28 01:30:23 +0000929\module{optparse} will set
Neal Norwitz488609e2003-01-06 16:51:37 +0000930\begin{verbatim}
Greg Wardb6f7fb72004-09-28 01:30:23 +0000931options.f = "foo.txt"
932options.point = (1.0, -3.5, 4.0)
933options.f = "bar.txt"
Neal Norwitz488609e2003-01-06 16:51:37 +0000934\end{verbatim}
935
Greg Wardb6f7fb72004-09-28 01:30:23 +0000936\item {}
937\code{store{\_}const} {[}required: \code{const}; relevant: \member{dest}]
Neal Norwitz488609e2003-01-06 16:51:37 +0000938
Greg Wardb6f7fb72004-09-28 01:30:23 +0000939The value \code{const} is stored in \member{dest}.
Neal Norwitz488609e2003-01-06 16:51:37 +0000940
941Example:
Neal Norwitz488609e2003-01-06 16:51:37 +0000942\begin{verbatim}
Greg Wardb6f7fb72004-09-28 01:30:23 +0000943parser.add_option("-q", "--quiet",
944 action="store_const", const=0, dest="verbose")
945parser.add_option("-v", "--verbose",
946 action="store_const", const=1, dest="verbose")
947parser.add_option("--noisy",
948 action="store_const", const=2, dest="verbose")
Neal Norwitz488609e2003-01-06 16:51:37 +0000949\end{verbatim}
950
Georg Brandlcdceeb82007-09-24 17:56:12 +0000951If \longprogramopt{noisy} is seen, \module{optparse} will set
Neal Norwitz488609e2003-01-06 16:51:37 +0000952\begin{verbatim}
Greg Wardb6f7fb72004-09-28 01:30:23 +0000953options.verbose = 2
Neal Norwitz488609e2003-01-06 16:51:37 +0000954\end{verbatim}
955
Greg Wardb6f7fb72004-09-28 01:30:23 +0000956\item {}
957\code{store{\_}true} {[}relevant: \member{dest}]
Neal Norwitz488609e2003-01-06 16:51:37 +0000958
Greg Wardb6f7fb72004-09-28 01:30:23 +0000959A special case of \code{store{\_}const} that stores a true value
960to \member{dest}.
Neal Norwitz488609e2003-01-06 16:51:37 +0000961
Greg Wardb6f7fb72004-09-28 01:30:23 +0000962\item {}
963\code{store{\_}false} {[}relevant: \member{dest}]
Neal Norwitz488609e2003-01-06 16:51:37 +0000964
Greg Wardb6f7fb72004-09-28 01:30:23 +0000965Like \code{store{\_}true}, but stores a false value.
Neal Norwitz488609e2003-01-06 16:51:37 +0000966
967Example:
Neal Norwitz488609e2003-01-06 16:51:37 +0000968\begin{verbatim}
Greg Wardb6f7fb72004-09-28 01:30:23 +0000969parser.add_option("--clobber", action="store_true", dest="clobber")
970parser.add_option("--no-clobber", action="store_false", dest="clobber")
Neal Norwitz488609e2003-01-06 16:51:37 +0000971\end{verbatim}
972
Greg Wardb6f7fb72004-09-28 01:30:23 +0000973\item {}
974\code{append} {[}relevant: \member{type}, \member{dest}, \code{nargs}, \code{choices}]
Neal Norwitz488609e2003-01-06 16:51:37 +0000975
976The option must be followed by an argument, which is appended to the
Greg Wardb6f7fb72004-09-28 01:30:23 +0000977list in \member{dest}. If no default value for \member{dest} is supplied, an
978empty list is automatically created when \module{optparse} first encounters this
979option on the command-line. If \code{nargs} {\textgreater} 1, multiple arguments are
980consumed, and a tuple of length \code{nargs} is appended to \member{dest}.
Neal Norwitz488609e2003-01-06 16:51:37 +0000981
Greg Wardb6f7fb72004-09-28 01:30:23 +0000982The defaults for \member{type} and \member{dest} are the same as for the
983\code{store} action.
Neal Norwitz488609e2003-01-06 16:51:37 +0000984
985Example:
Neal Norwitz488609e2003-01-06 16:51:37 +0000986\begin{verbatim}
Greg Wardb6f7fb72004-09-28 01:30:23 +0000987parser.add_option("-t", "--tracks", action="append", type="int")
Neal Norwitz488609e2003-01-06 16:51:37 +0000988\end{verbatim}
989
Greg Wardb6f7fb72004-09-28 01:30:23 +0000990If \code{"-t3"} is seen on the command-line, \module{optparse} does the equivalent of:
Neal Norwitz488609e2003-01-06 16:51:37 +0000991\begin{verbatim}
Greg Wardb6f7fb72004-09-28 01:30:23 +0000992options.tracks = []
993options.tracks.append(int("3"))
Neal Norwitz488609e2003-01-06 16:51:37 +0000994\end{verbatim}
995
Georg Brandlcdceeb82007-09-24 17:56:12 +0000996If, a little later on, \longprogramopt{tracks=4} is seen, it does:
Neal Norwitz488609e2003-01-06 16:51:37 +0000997\begin{verbatim}
Greg Wardb6f7fb72004-09-28 01:30:23 +0000998options.tracks.append(int("4"))
Neal Norwitz488609e2003-01-06 16:51:37 +0000999\end{verbatim}
1000
Greg Wardb6f7fb72004-09-28 01:30:23 +00001001\item {}
Greg Wardab05edc2006-04-23 03:47:58 +00001002\code{append{\_}const} {[}required: \code{const}; relevant: \member{dest}]
1003
1004Like \code{store{\_}const}, but the value \code{const} is appended to \member{dest};
Georg Brandlcdceeb82007-09-24 17:56:12 +00001005as with \code{append}, \member{dest} defaults to \code{None}, and an empty list is
Greg Wardab05edc2006-04-23 03:47:58 +00001006automatically created the first time the option is encountered.
1007
1008\item {}
Greg Wardb6f7fb72004-09-28 01:30:23 +00001009\code{count} {[}relevant: \member{dest}]
Neal Norwitz488609e2003-01-06 16:51:37 +00001010
Greg Wardb6f7fb72004-09-28 01:30:23 +00001011Increment the integer stored at \member{dest}. If no default value is
1012supplied, \member{dest} is set to zero before being incremented the first
1013time.
Neal Norwitz488609e2003-01-06 16:51:37 +00001014
1015Example:
Neal Norwitz488609e2003-01-06 16:51:37 +00001016\begin{verbatim}
Greg Wardb6f7fb72004-09-28 01:30:23 +00001017parser.add_option("-v", action="count", dest="verbosity")
Neal Norwitz488609e2003-01-06 16:51:37 +00001018\end{verbatim}
1019
Greg Wardb6f7fb72004-09-28 01:30:23 +00001020The first time \code{"-v"} is seen on the command line, \module{optparse} does the
1021equivalent of:
Neal Norwitz488609e2003-01-06 16:51:37 +00001022\begin{verbatim}
Greg Wardb6f7fb72004-09-28 01:30:23 +00001023options.verbosity = 0
1024options.verbosity += 1
Neal Norwitz488609e2003-01-06 16:51:37 +00001025\end{verbatim}
1026
Greg Wardb6f7fb72004-09-28 01:30:23 +00001027Every subsequent occurrence of \code{"-v"} results in
Neal Norwitz488609e2003-01-06 16:51:37 +00001028\begin{verbatim}
Greg Wardb6f7fb72004-09-28 01:30:23 +00001029options.verbosity += 1
Neal Norwitz488609e2003-01-06 16:51:37 +00001030\end{verbatim}
1031
Greg Wardb6f7fb72004-09-28 01:30:23 +00001032\item {}
1033\code{callback} {[}required: \code{callback};
1034relevant: \member{type}, \code{nargs}, \code{callback{\_}args}, \code{callback{\_}kwargs}]
Neal Norwitz488609e2003-01-06 16:51:37 +00001035
Greg Wardab05edc2006-04-23 03:47:58 +00001036Call the function specified by \code{callback}, which is called as
Neal Norwitz488609e2003-01-06 16:51:37 +00001037\begin{verbatim}
Greg Wardab05edc2006-04-23 03:47:58 +00001038func(option, opt_str, value, parser, *args, **kwargs)
Neal Norwitz488609e2003-01-06 16:51:37 +00001039\end{verbatim}
1040
Greg Warde644a1b2004-10-01 01:16:39 +00001041See section~\ref{optparse-option-callbacks}, Option Callbacks for more detail.
Neal Norwitz488609e2003-01-06 16:51:37 +00001042
Greg Wardb6f7fb72004-09-28 01:30:23 +00001043\item {}
1044\member{help}
Neal Norwitz488609e2003-01-06 16:51:37 +00001045
Greg Wardb6f7fb72004-09-28 01:30:23 +00001046Prints a complete help message for all the options in the
1047current option parser. The help message is constructed from
Greg Wardab05edc2006-04-23 03:47:58 +00001048the \code{usage} string passed to OptionParser's constructor and
Greg Wardb6f7fb72004-09-28 01:30:23 +00001049the \member{help} string passed to every option.
Neal Norwitz488609e2003-01-06 16:51:37 +00001050
Greg Wardb6f7fb72004-09-28 01:30:23 +00001051If no \member{help} string is supplied for an option, it will still be
1052listed in the help message. To omit an option entirely, use
1053the special value \code{optparse.SUPPRESS{\_}HELP}.
1054
1055\module{optparse} automatically adds a \member{help} option to all OptionParsers, so
1056you do not normally need to create one.
Neal Norwitz488609e2003-01-06 16:51:37 +00001057
1058Example:
Neal Norwitz488609e2003-01-06 16:51:37 +00001059\begin{verbatim}
Greg Wardb6f7fb72004-09-28 01:30:23 +00001060from optparse import OptionParser, SUPPRESS_HELP
Neal Norwitz488609e2003-01-06 16:51:37 +00001061
Greg Wardb6f7fb72004-09-28 01:30:23 +00001062parser = OptionParser()
1063parser.add_option("-h", "--help", action="help"),
1064parser.add_option("-v", action="store_true", dest="verbose",
1065 help="Be moderately verbose")
1066parser.add_option("--file", dest="filename",
1067 help="Input file to read data from"),
1068parser.add_option("--secret", help=SUPPRESS_HELP)
Neal Norwitz488609e2003-01-06 16:51:37 +00001069\end{verbatim}
1070
Georg Brandlcdceeb82007-09-24 17:56:12 +00001071If \module{optparse} sees either \programopt{h} or \longprogramopt{help} on the command line, it
Greg Wardb6f7fb72004-09-28 01:30:23 +00001072will print something like the following help message to stdout
1073(assuming \code{sys.argv{[}0]} is \code{"foo.py"}):
Neal Norwitz488609e2003-01-06 16:51:37 +00001074\begin{verbatim}
Greg Wardb6f7fb72004-09-28 01:30:23 +00001075usage: foo.py [options]
Neal Norwitz488609e2003-01-06 16:51:37 +00001076
1077options:
1078 -h, --help Show this help message and exit
1079 -v Be moderately verbose
1080 --file=FILENAME Input file to read data from
1081\end{verbatim}
1082
1083After printing the help message, \module{optparse} terminates your process
1084with \code{sys.exit(0)}.
1085
Greg Wardb6f7fb72004-09-28 01:30:23 +00001086\item {}
1087\code{version}
Neal Norwitz488609e2003-01-06 16:51:37 +00001088
Greg Wardb6f7fb72004-09-28 01:30:23 +00001089Prints the version number supplied to the OptionParser to stdout and
1090exits. The version number is actually formatted and printed by the
1091\code{print{\_}version()} method of OptionParser. Generally only relevant
1092if the \code{version} argument is supplied to the OptionParser
1093constructor. As with \member{help} options, you will rarely create
1094\code{version} options, since \module{optparse} automatically adds them when needed.
1095
1096\end{itemize}
1097
Neal Norwitz488609e2003-01-06 16:51:37 +00001098
Greg Wardab05edc2006-04-23 03:47:58 +00001099\subsubsection{Option attributes\label{optparse-option-attributes}}
1100
1101The following option attributes may be passed as keyword arguments
1102to \code{parser.add{\_}option()}. If you pass an option attribute
1103that is not relevant to a particular option, or fail to pass a required
1104option attribute, \module{optparse} raises OptionError.
1105\begin{itemize}
1106\item {}
1107\member{action} (default: \code{"store"})
1108
1109Determines \module{optparse}'s behaviour when this option is seen on the command
1110line; the available options are documented above.
1111
1112\item {}
1113\member{type} (default: \code{"string"})
1114
1115The argument type expected by this option (e.g., \code{"string"} or
1116\code{"int"}); the available option types are documented below.
1117
1118\item {}
1119\member{dest} (default: derived from option strings)
1120
1121If the option's action implies writing or modifying a value somewhere,
1122this tells \module{optparse} where to write it: \member{dest} names an attribute of the
1123\code{options} object that \module{optparse} builds as it parses the command line.
1124
1125\item {}
1126\code{default} (deprecated)
1127
1128The value to use for this option's destination if the option is not
1129seen on the command line. Deprecated; use \code{parser.set{\_}defaults()}
1130instead.
1131
1132\item {}
1133\code{nargs} (default: 1)
1134
1135How many arguments of type \member{type} should be consumed when this
1136option is seen. If {\textgreater} 1, \module{optparse} will store a tuple of values to
1137\member{dest}.
1138
1139\item {}
1140\code{const}
1141
1142For actions that store a constant value, the constant value to store.
1143
1144\item {}
1145\code{choices}
1146
1147For options of type \code{"choice"}, the list of strings the user
1148may choose from.
1149
1150\item {}
1151\code{callback}
1152
1153For options with action \code{"callback"}, the callable to call when this
1154option is seen. See section~\ref{optparse-option-callbacks}, Option Callbacks for detail on the arguments
1155passed to \code{callable}.
1156
1157\item {}
1158\code{callback{\_}args}, \code{callback{\_}kwargs}
1159
1160Additional positional and keyword arguments to pass to \code{callback}
1161after the four standard callback arguments.
1162
1163\item {}
1164\member{help}
1165
1166Help text to print for this option when listing all available options
Georg Brandlcdceeb82007-09-24 17:56:12 +00001167after the user supplies a \member{help} option (such as \longprogramopt{help}).
Greg Wardab05edc2006-04-23 03:47:58 +00001168If no help text is supplied, the option will be listed without help
1169text. To hide this option, use the special value \code{SUPPRESS{\_}HELP}.
1170
1171\item {}
1172\code{metavar} (default: derived from option strings)
1173
1174Stand-in for the option argument(s) to use when printing help text.
1175See section~\ref{optparse-tutorial}, the tutorial for an example.
1176
1177\end{itemize}
1178
1179
Greg Warde644a1b2004-10-01 01:16:39 +00001180\subsubsection{Standard option types\label{optparse-standard-option-types}}
Neal Norwitz488609e2003-01-06 16:51:37 +00001181
Greg Wardb6f7fb72004-09-28 01:30:23 +00001182\module{optparse} has six built-in option types: \code{string}, \code{int}, \code{long},
1183\code{choice}, \code{float} and \code{complex}. If you need to add new option
Greg Wardc5221e12006-06-10 16:40:01 +00001184types, see section~\ref{optparse-extending-optparse}, Extending \module{optparse}.
Neal Norwitz488609e2003-01-06 16:51:37 +00001185
Greg Wardb6f7fb72004-09-28 01:30:23 +00001186Arguments to string options are not checked or converted in any way: the
1187text on the command line is stored in the destination (or passed to the
1188callback) as-is.
Neal Norwitz488609e2003-01-06 16:51:37 +00001189
Greg Wardab05edc2006-04-23 03:47:58 +00001190Integer arguments (type \code{int} or \code{long}) are parsed as follows:
1191\begin{quote}
1192\begin{itemize}
1193\item {}
1194if the number starts with \code{0x}, it is parsed as a hexadecimal number
Neal Norwitz488609e2003-01-06 16:51:37 +00001195
Greg Wardab05edc2006-04-23 03:47:58 +00001196\item {}
1197if the number starts with \code{0}, it is parsed as an octal number
1198
1199\item {}
Georg Brandlcdceeb82007-09-24 17:56:12 +00001200if the number starts with \code{0b}, it is parsed as a binary number
Greg Wardab05edc2006-04-23 03:47:58 +00001201
1202\item {}
1203otherwise, the number is parsed as a decimal number
1204
1205\end{itemize}
1206\end{quote}
1207
1208The conversion is done by calling either \code{int()} or \code{long()} with
1209the appropriate base (2, 8, 10, or 16). If this fails, so will \module{optparse},
1210although with a more useful error message.
1211
1212\code{float} and \code{complex} option arguments are converted directly with
1213\code{float()} and \code{complex()}, with similar error-handling.
Neal Norwitz488609e2003-01-06 16:51:37 +00001214
Greg Wardb6f7fb72004-09-28 01:30:23 +00001215\code{choice} options are a subtype of \code{string} options. The \code{choices}
1216option attribute (a sequence of strings) defines the set of allowed
Greg Wardab05edc2006-04-23 03:47:58 +00001217option arguments. \code{optparse.check{\_}choice()} compares
Greg Wardb6f7fb72004-09-28 01:30:23 +00001218user-supplied option arguments against this master list and raises
Greg Wardab05edc2006-04-23 03:47:58 +00001219OptionValueError if an invalid string is given.
1220
1221
1222\subsubsection{Parsing arguments\label{optparse-parsing-arguments}}
1223
1224The whole point of creating and populating an OptionParser is to call
1225its \method{parse{\_}args()} method:
1226\begin{verbatim}
Fred Drake2cb077a2007-05-17 19:29:43 +00001227(options, args) = parser.parse_args(args=None, values=None)
Greg Wardab05edc2006-04-23 03:47:58 +00001228\end{verbatim}
1229
1230where the input parameters are
1231\begin{description}
1232\item[\code{args}]
Greg Wardd1c797e2006-06-11 14:42:41 +00001233the list of arguments to process (default: \code{sys.argv{[}1:]})
Fred Drake2cb077a2007-05-17 19:29:43 +00001234\item[\code{values}]
Greg Wardd1c797e2006-06-11 14:42:41 +00001235object to store option arguments in (default: a new instance of
1236optparse.Values)
Greg Wardab05edc2006-04-23 03:47:58 +00001237\end{description}
1238
1239and the return values are
1240\begin{description}
1241\item[\code{options}]
Greg Wardd1c797e2006-06-11 14:42:41 +00001242the same object that was passed in as \code{options}, or the
Greg Wardab05edc2006-04-23 03:47:58 +00001243optparse.Values instance created by \module{optparse}
1244\item[\code{args}]
1245the leftover positional arguments after all options have been
1246processed
1247\end{description}
1248
1249The most common usage is to supply neither keyword argument. If you
Greg Wardd1c797e2006-06-11 14:42:41 +00001250supply \code{options}, it will be modified with repeated \code{setattr()}
1251calls (roughly one for every option argument stored to an option
1252destination) and returned by \method{parse{\_}args()}.
Greg Wardab05edc2006-04-23 03:47:58 +00001253
1254If \method{parse{\_}args()} encounters any errors in the argument list, it calls
1255the OptionParser's \method{error()} method with an appropriate end-user error
1256message. This ultimately terminates your process with an exit status of
12572 (the traditional \UNIX{} exit status for command-line errors).
Neal Norwitz488609e2003-01-06 16:51:37 +00001258
Greg Wardb6f7fb72004-09-28 01:30:23 +00001259
Greg Warde644a1b2004-10-01 01:16:39 +00001260\subsubsection{Querying and manipulating your option parser\label{optparse-querying-manipulating-option-parser}}
Neal Norwitz488609e2003-01-06 16:51:37 +00001261
1262Sometimes, it's useful to poke around your option parser and see what's
Greg Wardb6f7fb72004-09-28 01:30:23 +00001263there. OptionParser provides a couple of methods to help you out:
1264\begin{description}
1265\item[\code{has{\_}option(opt{\_}str)}]
1266Return true if the OptionParser has an option with
Georg Brandlcdceeb82007-09-24 17:56:12 +00001267option string \code{opt{\_}str} (e.g., \programopt{-q} or \longprogramopt{verbose}).
Greg Wardb6f7fb72004-09-28 01:30:23 +00001268\item[\code{get{\_}option(opt{\_}str)}]
1269Returns the Option instance with the option string \code{opt{\_}str}, or
1270\code{None} if no options have that option string.
1271\item[\code{remove{\_}option(opt{\_}str)}]
1272If the OptionParser has an option corresponding to \code{opt{\_}str},
1273that option is removed. If that option provided any other
1274option strings, all of those option strings become invalid.
Greg Wardb6f7fb72004-09-28 01:30:23 +00001275If \code{opt{\_}str} does not occur in any option belonging to this
Greg Wardab05edc2006-04-23 03:47:58 +00001276OptionParser, raises ValueError.
Greg Wardb6f7fb72004-09-28 01:30:23 +00001277\end{description}
Neal Norwitz488609e2003-01-06 16:51:37 +00001278
Neal Norwitz488609e2003-01-06 16:51:37 +00001279
Greg Wardb6f7fb72004-09-28 01:30:23 +00001280\subsubsection{Conflicts between options\label{optparse-conflicts-between-options}}
Neal Norwitz488609e2003-01-06 16:51:37 +00001281
Greg Wardb6f7fb72004-09-28 01:30:23 +00001282If you're not careful, it's easy to define options with conflicting
1283option strings:
Neal Norwitz488609e2003-01-06 16:51:37 +00001284\begin{verbatim}
1285parser.add_option("-n", "--dry-run", ...)
Greg Wardb6f7fb72004-09-28 01:30:23 +00001286[...]
Neal Norwitz488609e2003-01-06 16:51:37 +00001287parser.add_option("-n", "--noisy", ...)
Neal Norwitz488609e2003-01-06 16:51:37 +00001288\end{verbatim}
1289
Greg Wardb6f7fb72004-09-28 01:30:23 +00001290(This is particularly true if you've defined your own OptionParser
1291subclass with some standard options.)
Neal Norwitz488609e2003-01-06 16:51:37 +00001292
Greg Wardb6f7fb72004-09-28 01:30:23 +00001293Every time you add an option, \module{optparse} checks for conflicts with existing
1294options. If it finds any, it invokes the current conflict-handling
1295mechanism. You can set the conflict-handling mechanism either in the
1296constructor:
Neal Norwitz488609e2003-01-06 16:51:37 +00001297\begin{verbatim}
Greg Wardab05edc2006-04-23 03:47:58 +00001298parser = OptionParser(..., conflict_handler=handler)
Neal Norwitz488609e2003-01-06 16:51:37 +00001299\end{verbatim}
1300
Greg Wardb6f7fb72004-09-28 01:30:23 +00001301or with a separate call:
1302\begin{verbatim}
Greg Wardab05edc2006-04-23 03:47:58 +00001303parser.set_conflict_handler(handler)
Greg Wardb6f7fb72004-09-28 01:30:23 +00001304\end{verbatim}
Neal Norwitz488609e2003-01-06 16:51:37 +00001305
Greg Wardab05edc2006-04-23 03:47:58 +00001306The available conflict handlers are:
Greg Wardb6f7fb72004-09-28 01:30:23 +00001307\begin{quote}
1308\begin{description}
1309\item[\code{error} (default)]
1310assume option conflicts are a programming error and raise
Greg Wardab05edc2006-04-23 03:47:58 +00001311OptionConflictError
Greg Wardb6f7fb72004-09-28 01:30:23 +00001312\item[\code{resolve}]
1313resolve option conflicts intelligently (see below)
1314\end{description}
1315\end{quote}
Neal Norwitz488609e2003-01-06 16:51:37 +00001316
Greg Wardb6f7fb72004-09-28 01:30:23 +00001317As an example, let's define an OptionParser that resolves conflicts
1318intelligently and add conflicting options to it:
Neal Norwitz488609e2003-01-06 16:51:37 +00001319\begin{verbatim}
1320parser = OptionParser(conflict_handler="resolve")
Greg Wardb6f7fb72004-09-28 01:30:23 +00001321parser.add_option("-n", "--dry-run", ..., help="do no harm")
1322parser.add_option("-n", "--noisy", ..., help="be noisy")
Neal Norwitz488609e2003-01-06 16:51:37 +00001323\end{verbatim}
1324
Neal Norwitz488609e2003-01-06 16:51:37 +00001325At this point, \module{optparse} detects that a previously-added option is already
Greg Wardb6f7fb72004-09-28 01:30:23 +00001326using the \code{"-n"} option string. Since \code{conflict{\_}handler} is
1327\code{"resolve"}, it resolves the situation by removing \code{"-n"} from the
Georg Brandlcdceeb82007-09-24 17:56:12 +00001328earlier option's list of option strings. Now \longprogramopt{dry-run} is the
Greg Wardb6f7fb72004-09-28 01:30:23 +00001329only way for the user to activate that option. If the user asks for
1330help, the help message will reflect that:
Neal Norwitz488609e2003-01-06 16:51:37 +00001331\begin{verbatim}
1332options:
Greg Wardb6f7fb72004-09-28 01:30:23 +00001333 --dry-run do no harm
1334 [...]
Neal Norwitz488609e2003-01-06 16:51:37 +00001335 -n, --noisy be noisy
1336\end{verbatim}
1337
Greg Wardb6f7fb72004-09-28 01:30:23 +00001338It's possible to whittle away the option strings for a previously-added
1339option until there are none left, and the user has no way of invoking
1340that option from the command-line. In that case, \module{optparse} removes that
1341option completely, so it doesn't show up in help text or anywhere else.
1342Carrying on with our existing OptionParser:
Neal Norwitz488609e2003-01-06 16:51:37 +00001343\begin{verbatim}
1344parser.add_option("--dry-run", ..., help="new dry-run option")
1345\end{verbatim}
1346
Georg Brandlcdceeb82007-09-24 17:56:12 +00001347At this point, the original \programopt{-n}/\longprogramopt{dry-run} option is no longer
Greg Wardb6f7fb72004-09-28 01:30:23 +00001348accessible, so \module{optparse} removes it, leaving this help text:
Neal Norwitz488609e2003-01-06 16:51:37 +00001349\begin{verbatim}
1350options:
Greg Wardb6f7fb72004-09-28 01:30:23 +00001351 [...]
Neal Norwitz488609e2003-01-06 16:51:37 +00001352 -n, --noisy be noisy
1353 --dry-run new dry-run option
1354\end{verbatim}
Greg Wardab05edc2006-04-23 03:47:58 +00001355
1356
1357\subsubsection{Cleanup\label{optparse-cleanup}}
1358
1359OptionParser instances have several cyclic references. This should not
1360be a problem for Python's garbage collector, but you may wish to break
1361the cyclic references explicitly by calling \code{destroy()} on your
1362OptionParser once you are done with it. This is particularly useful in
1363long-running applications where large object graphs are reachable from
1364your OptionParser.
1365
1366
1367\subsubsection{Other methods\label{optparse-other-methods}}
1368
1369OptionParser supports several other public methods:
1370\begin{itemize}
1371\item {}
1372\code{set{\_}usage(usage)}
1373
1374Set the usage string according to the rules described above for the
1375\code{usage} constructor keyword argument. Passing \code{None} sets the
1376default usage string; use \code{SUPPRESS{\_}USAGE} to suppress a usage
1377message.
1378
1379\item {}
1380\code{enable{\_}interspersed{\_}args()}, \code{disable{\_}interspersed{\_}args()}
1381
1382Enable/disable positional arguments interspersed with options, similar
1383to GNU getopt (enabled by default). For example, if \code{"-a"} and
1384\code{"-b"} are both simple options that take no arguments, \module{optparse}
1385normally accepts this syntax:
1386\begin{verbatim}
1387prog -a arg1 -b arg2
1388\end{verbatim}
1389
1390and treats it as equivalent to
1391\begin{verbatim}
1392prog -a -b arg1 arg2
1393\end{verbatim}
1394
1395To disable this feature, call \code{disable{\_}interspersed{\_}args()}. This
1396restores traditional \UNIX{} syntax, where option parsing stops with the
1397first non-option argument.
1398
1399\item {}
1400\code{set{\_}defaults(dest=value, ...)}
1401
1402Set default values for several option destinations at once. Using
1403\method{set{\_}defaults()} is the preferred way to set default values for
1404options, since multiple options can share the same destination. For
1405example, if several ``mode'' options all set the same destination, any
1406one of them can set the default, and the last one wins:
1407\begin{verbatim}
1408parser.add_option("--advanced", action="store_const",
1409 dest="mode", const="advanced",
1410 default="novice") # overridden below
1411parser.add_option("--novice", action="store_const",
1412 dest="mode", const="novice",
1413 default="advanced") # overrides above setting
1414\end{verbatim}
1415
1416To avoid this confusion, use \method{set{\_}defaults()}:
1417\begin{verbatim}
1418parser.set_defaults(mode="advanced")
1419parser.add_option("--advanced", action="store_const",
1420 dest="mode", const="advanced")
1421parser.add_option("--novice", action="store_const",
1422 dest="mode", const="novice")
1423\end{verbatim}
1424
1425\end{itemize}
Greg Ward48fae7a2006-07-23 16:05:51 +00001426% $Id: reference.txt 519 2006-06-11 14:39:11Z gward $
Neal Norwitz488609e2003-01-06 16:51:37 +00001427
Neal Norwitz488609e2003-01-06 16:51:37 +00001428
Greg Wardb6f7fb72004-09-28 01:30:23 +00001429\subsection{Option Callbacks\label{optparse-option-callbacks}}
Neal Norwitz488609e2003-01-06 16:51:37 +00001430
Greg Wardb6f7fb72004-09-28 01:30:23 +00001431When \module{optparse}'s built-in actions and types aren't quite enough for your
1432needs, you have two choices: extend \module{optparse} or define a callback option.
1433Extending \module{optparse} is more general, but overkill for a lot of simple
1434cases. Quite often a simple callback is all you need.
Neal Norwitz488609e2003-01-06 16:51:37 +00001435
Greg Wardb6f7fb72004-09-28 01:30:23 +00001436There are two steps to defining a callback option:
1437\begin{itemize}
1438\item {}
1439define the option itself using the \code{callback} action
Neal Norwitz488609e2003-01-06 16:51:37 +00001440
Greg Wardb6f7fb72004-09-28 01:30:23 +00001441\item {}
1442write the callback; this is a function (or method) that
1443takes at least four arguments, as described below
1444
1445\end{itemize}
1446
1447
Greg Warde644a1b2004-10-01 01:16:39 +00001448\subsubsection{Defining a callback option\label{optparse-defining-callback-option}}
Greg Wardb6f7fb72004-09-28 01:30:23 +00001449
1450As always, the easiest way to define a callback option is by using the
1451\code{parser.add{\_}option()} method. Apart from \member{action}, the only option
1452attribute you must specify is \code{callback}, the function to call:
Neal Norwitz488609e2003-01-06 16:51:37 +00001453\begin{verbatim}
Greg Wardb6f7fb72004-09-28 01:30:23 +00001454parser.add_option("-c", action="callback", callback=my_callback)
Neal Norwitz488609e2003-01-06 16:51:37 +00001455\end{verbatim}
1456
Greg Wardb6f7fb72004-09-28 01:30:23 +00001457\code{callback} is a function (or other callable object), so you must have
1458already defined \code{my{\_}callback()} when you create this callback option.
1459In this simple case, \module{optparse} doesn't even know if \programopt{-c} takes any
1460arguments, which usually means that the option takes no arguments{---}the
1461mere presence of \programopt{-c} on the command-line is all it needs to know. In
1462some circumstances, though, you might want your callback to consume an
1463arbitrary number of command-line arguments. This is where writing
1464callbacks gets tricky; it's covered later in this section.
1465
1466\module{optparse} always passes four particular arguments to your callback, and it
1467will only pass additional arguments if you specify them via
1468\code{callback{\_}args} and \code{callback{\_}kwargs}. Thus, the minimal callback
1469function signature is:
1470\begin{verbatim}
1471def my_callback(option, opt, value, parser):
1472\end{verbatim}
1473
1474The four arguments to a callback are described below.
Neal Norwitz488609e2003-01-06 16:51:37 +00001475
1476There are several other option attributes that you can supply when you
Greg Wardb6f7fb72004-09-28 01:30:23 +00001477define a callback option:
1478\begin{description}
1479\item[\member{type}]
1480has its usual meaning: as with the \code{store} or \code{append} actions,
1481it instructs \module{optparse} to consume one argument and convert it to
1482\member{type}. Rather than storing the converted value(s) anywhere,
1483though, \module{optparse} passes it to your callback function.
1484\item[\code{nargs}]
1485also has its usual meaning: if it is supplied and {\textgreater} 1, \module{optparse} will
1486consume \code{nargs} arguments, each of which must be convertible to
1487\member{type}. It then passes a tuple of converted values to your
1488callback.
1489\item[\code{callback{\_}args}]
1490a tuple of extra positional arguments to pass to the callback
1491\item[\code{callback{\_}kwargs}]
1492a dictionary of extra keyword arguments to pass to the callback
1493\end{description}
Neal Norwitz488609e2003-01-06 16:51:37 +00001494
Neal Norwitz488609e2003-01-06 16:51:37 +00001495
Greg Warde644a1b2004-10-01 01:16:39 +00001496\subsubsection{How callbacks are called\label{optparse-how-callbacks-called}}
Neal Norwitz488609e2003-01-06 16:51:37 +00001497
1498All callbacks are called as follows:
Neal Norwitz488609e2003-01-06 16:51:37 +00001499\begin{verbatim}
Greg Wardb6f7fb72004-09-28 01:30:23 +00001500func(option, opt_str, value, parser, *args, **kwargs)
Neal Norwitz488609e2003-01-06 16:51:37 +00001501\end{verbatim}
1502
1503where
Greg Wardb6f7fb72004-09-28 01:30:23 +00001504\begin{description}
1505\item[\code{option}]
1506is the Option instance that's calling the callback
1507\item[\code{opt{\_}str}]
Neal Norwitz488609e2003-01-06 16:51:37 +00001508is the option string seen on the command-line that's triggering the
Greg Wardb6f7fb72004-09-28 01:30:23 +00001509callback. (If an abbreviated long option was used, \code{opt{\_}str} will
1510be the full, canonical option string{---}e.g. if the user puts
Georg Brandlcdceeb82007-09-24 17:56:12 +00001511\longprogramopt{foo} on the command-line as an abbreviation for
1512\longprogramopt{foobar}, then \code{opt{\_}str} will be \longprogramopt{foobar}.)
Greg Wardb6f7fb72004-09-28 01:30:23 +00001513\item[\code{value}]
1514is the argument to this option seen on the command-line. \module{optparse} will
1515only expect an argument if \member{type} is set; the type of \code{value}
1516will be the type implied by the option's type. If \member{type} for this
1517option is \code{None} (no argument expected), then \code{value} will be
1518\code{None}. If \code{nargs} {\textgreater} 1, \code{value} will be a tuple of values of
1519the appropriate type.
1520\item[\code{parser}]
1521is the OptionParser instance driving the whole thing, mainly
1522useful because you can access some other interesting data through
1523its instance attributes:
1524\begin{description}
1525\item[\code{parser.largs}]
1526the current list of leftover arguments, ie. arguments that have
1527been consumed but are neither options nor option arguments.
1528Feel free to modify \code{parser.largs}, e.g. by adding more
Greg Wardab05edc2006-04-23 03:47:58 +00001529arguments to it. (This list will become \code{args}, the second
Greg Wardb6f7fb72004-09-28 01:30:23 +00001530return value of \method{parse{\_}args()}.)
1531\item[\code{parser.rargs}]
1532the current list of remaining arguments, ie. with \code{opt{\_}str} and
1533\code{value} (if applicable) removed, and only the arguments
1534following them still there. Feel free to modify
1535\code{parser.rargs}, e.g. by consuming more arguments.
1536\item[\code{parser.values}]
1537the object where option values are by default stored (an
1538instance of optparse.OptionValues). This lets callbacks use the
1539same mechanism as the rest of \module{optparse} for storing option values;
1540you don't need to mess around with globals or closures. You can
1541also access or modify the value(s) of any options already
1542encountered on the command-line.
1543\end{description}
Raymond Hettinger79e05312004-12-31 01:07:27 +00001544\item[\code{args}]
Neal Norwitz488609e2003-01-06 16:51:37 +00001545is a tuple of arbitrary positional arguments supplied via the
Greg Wardb6f7fb72004-09-28 01:30:23 +00001546\code{callback{\_}args} option attribute.
1547\item[\code{kwargs}]
Neal Norwitz488609e2003-01-06 16:51:37 +00001548is a dictionary of arbitrary keyword arguments supplied via
Greg Wardb6f7fb72004-09-28 01:30:23 +00001549\code{callback{\_}kwargs}.
1550\end{description}
Neal Norwitz488609e2003-01-06 16:51:37 +00001551
Neal Norwitz488609e2003-01-06 16:51:37 +00001552
Greg Warde644a1b2004-10-01 01:16:39 +00001553\subsubsection{Raising errors in a callback\label{optparse-raising-errors-in-callback}}
Neal Norwitz488609e2003-01-06 16:51:37 +00001554
Greg Wardab05edc2006-04-23 03:47:58 +00001555The callback function should raise OptionValueError if there are any
Greg Wardb6f7fb72004-09-28 01:30:23 +00001556problems with the option or its argument(s). \module{optparse} catches this and
1557terminates the program, printing the error message you supply to
1558stderr. Your message should be clear, concise, accurate, and mention
1559the option at fault. Otherwise, the user will have a hard time
1560figuring out what he did wrong.
Neal Norwitz488609e2003-01-06 16:51:37 +00001561
Neal Norwitz488609e2003-01-06 16:51:37 +00001562
Greg Warde644a1b2004-10-01 01:16:39 +00001563\subsubsection{Callback example 1: trivial callback\label{optparse-callback-example-1}}
Neal Norwitz488609e2003-01-06 16:51:37 +00001564
1565Here's an example of a callback option that takes no arguments, and
1566simply records that the option was seen:
Neal Norwitz488609e2003-01-06 16:51:37 +00001567\begin{verbatim}
Greg Wardb6f7fb72004-09-28 01:30:23 +00001568def record_foo_seen(option, opt_str, value, parser):
1569 parser.saw_foo = True
Neal Norwitz488609e2003-01-06 16:51:37 +00001570
1571parser.add_option("--foo", action="callback", callback=record_foo_seen)
1572\end{verbatim}
1573
Greg Wardb6f7fb72004-09-28 01:30:23 +00001574Of course, you could do that with the \code{store{\_}true} action.
Neal Norwitz488609e2003-01-06 16:51:37 +00001575
Greg Wardb6f7fb72004-09-28 01:30:23 +00001576
Greg Warde644a1b2004-10-01 01:16:39 +00001577\subsubsection{Callback example 2: check option order\label{optparse-callback-example-2}}
Greg Wardb6f7fb72004-09-28 01:30:23 +00001578
1579Here's a slightly more interesting example: record the fact that
1580\code{"-a"} is seen, but blow up if it comes after \code{"-b"} in the
1581command-line.
Neal Norwitz488609e2003-01-06 16:51:37 +00001582\begin{verbatim}
Greg Wardb6f7fb72004-09-28 01:30:23 +00001583def check_order(option, opt_str, value, parser):
Neal Norwitz488609e2003-01-06 16:51:37 +00001584 if parser.values.b:
1585 raise OptionValueError("can't use -a after -b")
1586 parser.values.a = 1
Greg Wardb6f7fb72004-09-28 01:30:23 +00001587[...]
Neal Norwitz488609e2003-01-06 16:51:37 +00001588parser.add_option("-a", action="callback", callback=check_order)
1589parser.add_option("-b", action="store_true", dest="b")
1590\end{verbatim}
1591
Neal Norwitz488609e2003-01-06 16:51:37 +00001592
Greg Warde644a1b2004-10-01 01:16:39 +00001593\subsubsection{Callback example 3: check option order (generalized)\label{optparse-callback-example-3}}
Greg Wardb6f7fb72004-09-28 01:30:23 +00001594
1595If you want to re-use this callback for several similar options (set a
1596flag, but blow up if \code{"-b"} has already been seen), it needs a bit of
1597work: the error message and the flag that it sets must be
1598generalized.
Neal Norwitz488609e2003-01-06 16:51:37 +00001599\begin{verbatim}
Greg Wardb6f7fb72004-09-28 01:30:23 +00001600def check_order(option, opt_str, value, parser):
Neal Norwitz488609e2003-01-06 16:51:37 +00001601 if parser.values.b:
Greg Wardb6f7fb72004-09-28 01:30:23 +00001602 raise OptionValueError("can't use %s after -b" % opt_str)
Neal Norwitz488609e2003-01-06 16:51:37 +00001603 setattr(parser.values, option.dest, 1)
Greg Wardb6f7fb72004-09-28 01:30:23 +00001604[...]
Neal Norwitz488609e2003-01-06 16:51:37 +00001605parser.add_option("-a", action="callback", callback=check_order, dest='a')
1606parser.add_option("-b", action="store_true", dest="b")
1607parser.add_option("-c", action="callback", callback=check_order, dest='c')
1608\end{verbatim}
1609
Greg Wardb6f7fb72004-09-28 01:30:23 +00001610
Greg Warde644a1b2004-10-01 01:16:39 +00001611\subsubsection{Callback example 4: check arbitrary condition\label{optparse-callback-example-4}}
Greg Wardb6f7fb72004-09-28 01:30:23 +00001612
1613Of course, you could put any condition in there{---}you're not limited
Neal Norwitz488609e2003-01-06 16:51:37 +00001614to checking the values of already-defined options. For example, if
1615you have options that should not be called when the moon is full, all
1616you have to do is this:
Neal Norwitz488609e2003-01-06 16:51:37 +00001617\begin{verbatim}
Greg Wardb6f7fb72004-09-28 01:30:23 +00001618def check_moon(option, opt_str, value, parser):
1619 if is_moon_full():
1620 raise OptionValueError("%s option invalid when moon is full"
1621 % opt_str)
Neal Norwitz488609e2003-01-06 16:51:37 +00001622 setattr(parser.values, option.dest, 1)
Greg Wardb6f7fb72004-09-28 01:30:23 +00001623[...]
Neal Norwitz488609e2003-01-06 16:51:37 +00001624parser.add_option("--foo",
1625 action="callback", callback=check_moon, dest="foo")
1626\end{verbatim}
1627
Greg Wardb6f7fb72004-09-28 01:30:23 +00001628(The definition of \code{is{\_}moon{\_}full()} is left as an exercise for the
Neal Norwitz488609e2003-01-06 16:51:37 +00001629reader.)
1630
Greg Wardb6f7fb72004-09-28 01:30:23 +00001631
Greg Warde644a1b2004-10-01 01:16:39 +00001632\subsubsection{Callback example 5: fixed arguments\label{optparse-callback-example-5}}
Neal Norwitz488609e2003-01-06 16:51:37 +00001633
1634Things get slightly more interesting when you define callback options
1635that take a fixed number of arguments. Specifying that a callback
Greg Wardb6f7fb72004-09-28 01:30:23 +00001636option takes arguments is similar to defining a \code{store} or \code{append}
1637option: if you define \member{type}, then the option takes one argument that
1638must be convertible to that type; if you further define \code{nargs}, then
1639the option takes \code{nargs} arguments.
Neal Norwitz488609e2003-01-06 16:51:37 +00001640
Greg Wardb6f7fb72004-09-28 01:30:23 +00001641Here's an example that just emulates the standard \code{store} action:
Neal Norwitz488609e2003-01-06 16:51:37 +00001642\begin{verbatim}
Greg Wardb6f7fb72004-09-28 01:30:23 +00001643def store_value(option, opt_str, value, parser):
Neal Norwitz488609e2003-01-06 16:51:37 +00001644 setattr(parser.values, option.dest, value)
Greg Wardb6f7fb72004-09-28 01:30:23 +00001645[...]
Neal Norwitz488609e2003-01-06 16:51:37 +00001646parser.add_option("--foo",
1647 action="callback", callback=store_value,
1648 type="int", nargs=3, dest="foo")
1649\end{verbatim}
1650
Greg Wardb6f7fb72004-09-28 01:30:23 +00001651Note that \module{optparse} takes care of consuming 3 arguments and converting them
1652to integers for you; all you have to do is store them. (Or whatever;
1653obviously you don't need a callback for this example.)
Neal Norwitz488609e2003-01-06 16:51:37 +00001654
Greg Wardb6f7fb72004-09-28 01:30:23 +00001655
Greg Warde644a1b2004-10-01 01:16:39 +00001656\subsubsection{Callback example 6: variable arguments\label{optparse-callback-example-6}}
Neal Norwitz488609e2003-01-06 16:51:37 +00001657
1658Things get hairy when you want an option to take a variable number of
Greg Wardb6f7fb72004-09-28 01:30:23 +00001659arguments. For this case, you must write a callback, as \module{optparse} doesn't
1660provide any built-in capabilities for it. And you have to deal with
1661certain intricacies of conventional \UNIX{} command-line parsing that \module{optparse}
1662normally handles for you. In particular, callbacks should implement
Georg Brandlcdceeb82007-09-24 17:56:12 +00001663the conventional rules for bare \longprogramopt{} and \programopt{-} arguments:
Neal Norwitz488609e2003-01-06 16:51:37 +00001664\begin{itemize}
Greg Wardb6f7fb72004-09-28 01:30:23 +00001665\item {}
Georg Brandlcdceeb82007-09-24 17:56:12 +00001666either \longprogramopt{} or \programopt{-} can be option arguments
Neal Norwitz488609e2003-01-06 16:51:37 +00001667
Greg Wardb6f7fb72004-09-28 01:30:23 +00001668\item {}
Georg Brandlcdceeb82007-09-24 17:56:12 +00001669bare \longprogramopt{} (if not the argument to some option): halt command-line
1670processing and discard the \longprogramopt{}
Neal Norwitz488609e2003-01-06 16:51:37 +00001671
Greg Wardb6f7fb72004-09-28 01:30:23 +00001672\item {}
Georg Brandlcdceeb82007-09-24 17:56:12 +00001673bare \programopt{-} (if not the argument to some option): halt command-line
1674processing but keep the \programopt{-} (append it to \code{parser.largs})
Greg Wardb6f7fb72004-09-28 01:30:23 +00001675
Neal Norwitz488609e2003-01-06 16:51:37 +00001676\end{itemize}
1677
1678If you want an option that takes a variable number of arguments, there
1679are several subtle, tricky issues to worry about. The exact
1680implementation you choose will be based on which trade-offs you're
Greg Wardb6f7fb72004-09-28 01:30:23 +00001681willing to make for your application (which is why \module{optparse} doesn't support
1682this sort of thing directly).
Neal Norwitz488609e2003-01-06 16:51:37 +00001683
1684Nevertheless, here's a stab at a callback for an option with variable
1685arguments:
Neal Norwitz488609e2003-01-06 16:51:37 +00001686\begin{verbatim}
Greg Wardb6f7fb72004-09-28 01:30:23 +00001687def vararg_callback(option, opt_str, value, parser):
Neal Norwitz488609e2003-01-06 16:51:37 +00001688 assert value is None
1689 done = 0
1690 value = []
1691 rargs = parser.rargs
1692 while rargs:
1693 arg = rargs[0]
1694
1695 # Stop if we hit an arg like "--foo", "-a", "-fx", "--file=f",
1696 # etc. Note that this also stops on "-3" or "-3.0", so if
1697 # your option takes numeric values, you will need to handle
1698 # this.
1699 if ((arg[:2] == "--" and len(arg) > 2) or
1700 (arg[:1] == "-" and len(arg) > 1 and arg[1] != "-")):
1701 break
1702 else:
1703 value.append(arg)
1704 del rargs[0]
1705
1706 setattr(parser.values, option.dest, value)
1707
Greg Wardb6f7fb72004-09-28 01:30:23 +00001708[...]
Neal Norwitz488609e2003-01-06 16:51:37 +00001709parser.add_option("-c", "--callback",
1710 action="callback", callback=varargs)
1711\end{verbatim}
1712
1713The main weakness with this particular implementation is that negative
Greg Wardb6f7fb72004-09-28 01:30:23 +00001714numbers in the arguments following \code{"-c"} will be interpreted as
1715further options (probably causing an error), rather than as arguments to
1716\code{"-c"}. Fixing this is left as an exercise for the reader.
Greg Warde644a1b2004-10-01 01:16:39 +00001717% $Id: callbacks.txt 415 2004-09-30 02:26:17Z greg $
Neal Norwitz488609e2003-01-06 16:51:37 +00001718
Greg Wardc5221e12006-06-10 16:40:01 +00001719
1720\subsection{Extending \module{optparse}\label{optparse-extending-optparse}}
1721
1722Since the two major controlling factors in how \module{optparse} interprets
1723command-line options are the action and type of each option, the most
1724likely direction of extension is to add new actions and new types.
1725
1726
1727\subsubsection{Adding new types\label{optparse-adding-new-types}}
1728
1729To add new types, you need to define your own subclass of \module{optparse}'s Option
1730class. This class has a couple of attributes that define \module{optparse}'s types:
1731\member{TYPES} and \member{TYPE{\_}CHECKER}.
1732
1733\member{TYPES} is a tuple of type names; in your subclass, simply define a new
1734tuple \member{TYPES} that builds on the standard one.
1735
1736\member{TYPE{\_}CHECKER} is a dictionary mapping type names to type-checking
1737functions. A type-checking function has the following signature:
1738\begin{verbatim}
1739def check_mytype(option, opt, value)
1740\end{verbatim}
1741
1742where \code{option} is an \class{Option} instance, \code{opt} is an option string
1743(e.g., \code{"-f"}), and \code{value} is the string from the command line that
1744must be checked and converted to your desired type. \code{check{\_}mytype()}
1745should return an object of the hypothetical type \code{mytype}. The value
1746returned by a type-checking function will wind up in the OptionValues
1747instance returned by \method{OptionParser.parse{\_}args()}, or be passed to a
1748callback as the \code{value} parameter.
1749
1750Your type-checking function should raise OptionValueError if it
1751encounters any problems. OptionValueError takes a single string
1752argument, which is passed as-is to OptionParser's \method{error()} method,
1753which in turn prepends the program name and the string \code{"error:"} and
1754prints everything to stderr before terminating the process.
1755
1756Here's a silly example that demonstrates adding a \code{complex} option
1757type to parse Python-style complex numbers on the command line. (This
1758is even sillier than it used to be, because \module{optparse} 1.3 added built-in
1759support for complex numbers, but never mind.)
1760
1761First, the necessary imports:
1762\begin{verbatim}
1763from copy import copy
1764from optparse import Option, OptionValueError
1765\end{verbatim}
1766
1767You need to define your type-checker first, since it's referred to later
1768(in the \member{TYPE{\_}CHECKER} class attribute of your Option subclass):
1769\begin{verbatim}
1770def check_complex(option, opt, value):
1771 try:
1772 return complex(value)
1773 except ValueError:
1774 raise OptionValueError(
1775 "option %s: invalid complex value: %r" % (opt, value))
1776\end{verbatim}
1777
1778Finally, the Option subclass:
1779\begin{verbatim}
1780class MyOption (Option):
1781 TYPES = Option.TYPES + ("complex",)
1782 TYPE_CHECKER = copy(Option.TYPE_CHECKER)
1783 TYPE_CHECKER["complex"] = check_complex
1784\end{verbatim}
1785
1786(If we didn't make a \function{copy()} of \member{Option.TYPE{\_}CHECKER}, we would end
1787up modifying the \member{TYPE{\_}CHECKER} attribute of \module{optparse}'s Option class.
1788This being Python, nothing stops you from doing that except good manners
1789and common sense.)
1790
1791That's it! Now you can write a script that uses the new option type
1792just like any other \module{optparse}-based script, except you have to instruct your
1793OptionParser to use MyOption instead of Option:
1794\begin{verbatim}
1795parser = OptionParser(option_class=MyOption)
1796parser.add_option("-c", type="complex")
1797\end{verbatim}
1798
1799Alternately, you can build your own option list and pass it to
1800OptionParser; if you don't use \method{add{\_}option()} in the above way, you
1801don't need to tell OptionParser which option class to use:
1802\begin{verbatim}
1803option_list = [MyOption("-c", action="store", type="complex", dest="c")]
1804parser = OptionParser(option_list=option_list)
1805\end{verbatim}
1806
1807
1808\subsubsection{Adding new actions\label{optparse-adding-new-actions}}
1809
1810Adding new actions is a bit trickier, because you have to understand
1811that \module{optparse} has a couple of classifications for actions:
1812\begin{description}
1813\item[``store'' actions]
1814actions that result in \module{optparse} storing a value to an attribute of the
1815current OptionValues instance; these options require a \member{dest}
1816attribute to be supplied to the Option constructor
1817\item[``typed'' actions]
1818actions that take a value from the command line and expect it to be
1819of a certain type; or rather, a string that can be converted to a
1820certain type. These options require a \member{type} attribute to the
1821Option constructor.
1822\end{description}
1823
1824These are overlapping sets: some default ``store'' actions are \code{store},
1825\code{store{\_}const}, \code{append}, and \code{count}, while the default ``typed''
1826actions are \code{store}, \code{append}, and \code{callback}.
1827
1828When you add an action, you need to categorize it by listing it in at
1829least one of the following class attributes of Option (all are lists of
1830strings):
1831\begin{description}
1832\item[\member{ACTIONS}]
1833all actions must be listed in ACTIONS
1834\item[\member{STORE{\_}ACTIONS}]
1835``store'' actions are additionally listed here
1836\item[\member{TYPED{\_}ACTIONS}]
1837``typed'' actions are additionally listed here
1838\item[\code{ALWAYS{\_}TYPED{\_}ACTIONS}]
1839actions that always take a type (i.e. whose options always take a
1840value) are additionally listed here. The only effect of this is
1841that \module{optparse} assigns the default type, \code{string}, to options with no
1842explicit type whose action is listed in \code{ALWAYS{\_}TYPED{\_}ACTIONS}.
1843\end{description}
1844
1845In order to actually implement your new action, you must override
1846Option's \method{take{\_}action()} method and add a case that recognizes your
1847action.
1848
1849For example, let's add an \code{extend} action. This is similar to the
1850standard \code{append} action, but instead of taking a single value from
1851the command-line and appending it to an existing list, \code{extend} will
1852take multiple values in a single comma-delimited string, and extend an
Georg Brandlcdceeb82007-09-24 17:56:12 +00001853existing list with them. That is, if \longprogramopt{names} is an \code{extend}
Greg Wardc5221e12006-06-10 16:40:01 +00001854option of type \code{string}, the command line
1855\begin{verbatim}
1856--names=foo,bar --names blah --names ding,dong
1857\end{verbatim}
1858
1859would result in a list
1860\begin{verbatim}
1861["foo", "bar", "blah", "ding", "dong"]
1862\end{verbatim}
1863
1864Again we define a subclass of Option:
1865\begin{verbatim}
1866class MyOption (Option):
1867
1868 ACTIONS = Option.ACTIONS + ("extend",)
1869 STORE_ACTIONS = Option.STORE_ACTIONS + ("extend",)
1870 TYPED_ACTIONS = Option.TYPED_ACTIONS + ("extend",)
1871 ALWAYS_TYPED_ACTIONS = Option.ALWAYS_TYPED_ACTIONS + ("extend",)
1872
1873 def take_action(self, action, dest, opt, value, values, parser):
1874 if action == "extend":
1875 lvalue = value.split(",")
1876 values.ensure_value(dest, []).extend(lvalue)
1877 else:
1878 Option.take_action(
1879 self, action, dest, opt, value, values, parser)
1880\end{verbatim}
1881
1882Features of note:
1883\begin{itemize}
1884\item {}
1885\code{extend} both expects a value on the command-line and stores that
1886value somewhere, so it goes in both \member{STORE{\_}ACTIONS} and
1887\member{TYPED{\_}ACTIONS}
1888
1889\item {}
1890to ensure that \module{optparse} assigns the default type of \code{string} to
1891\code{extend} actions, we put the \code{extend} action in
1892\code{ALWAYS{\_}TYPED{\_}ACTIONS} as well
1893
1894\item {}
1895\method{MyOption.take{\_}action()} implements just this one new action, and
1896passes control back to \method{Option.take{\_}action()} for the standard
1897\module{optparse} actions
1898
1899\item {}
1900\code{values} is an instance of the optparse{\_}parser.Values class,
1901which provides the very useful \method{ensure{\_}value()} method.
1902\method{ensure{\_}value()} is essentially \function{getattr()} with a safety valve;
1903it is called as
1904\begin{verbatim}
1905values.ensure_value(attr, value)
1906\end{verbatim}
1907
1908If the \code{attr} attribute of \code{values} doesn't exist or is None, then
1909ensure{\_}value() first sets it to \code{value}, and then returns 'value.
1910This is very handy for actions like \code{extend}, \code{append}, and
1911\code{count}, all of which accumulate data in a variable and expect that
1912variable to be of a certain type (a list for the first two, an integer
1913for the latter). Using \method{ensure{\_}value()} means that scripts using
1914your action don't have to worry about setting a default value for the
1915option destinations in question; they can just leave the default as
1916None and \method{ensure{\_}value()} will take care of getting it right when
1917it's needed.
1918
1919\end{itemize}
1920% $Id: extending.txt 517 2006-06-10 16:18:11Z gward $
1921