1 | % THIS FILE IS AUTO-GENERATED! DO NOT EDIT!
|
---|
2 | % (Your changes will be lost the next time it is generated.)
|
---|
3 | \section{\module{optparse} --- More powerful command line option parser}
|
---|
4 | \declaremodule{standard}{optparse}
|
---|
5 | \moduleauthor{Greg Ward}{gward@python.net}
|
---|
6 | \modulesynopsis{More convenient, flexible, and powerful command-line parsing library.}
|
---|
7 | \versionadded{2.3}
|
---|
8 | \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).
|
---|
11 |
|
---|
12 | \code{optparse} is a more convenient, flexible, and powerful library for
|
---|
13 | parsing command-line options than \code{getopt}. \code{optparse} uses a more
|
---|
14 | declarative 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
|
---|
17 | syntax, and additionally generates usage and help messages for you.
|
---|
18 |
|
---|
19 | Here's an example of using \code{optparse} in a simple script:
|
---|
20 | \begin{verbatim}
|
---|
21 | from optparse import OptionParser
|
---|
22 | [...]
|
---|
23 | parser = OptionParser()
|
---|
24 | parser.add_option("-f", "--file", dest="filename",
|
---|
25 | help="write report to FILE", metavar="FILE")
|
---|
26 | parser.add_option("-q", "--quiet",
|
---|
27 | action="store_false", dest="verbose", default=True,
|
---|
28 | help="don't print status messages to stdout")
|
---|
29 |
|
---|
30 | (options, args) = parser.parse_args()
|
---|
31 | \end{verbatim}
|
---|
32 |
|
---|
33 | With these few lines of code, users of your script can now do the
|
---|
34 | ``usual thing'' on the command-line, for example:
|
---|
35 | \begin{verbatim}
|
---|
36 | <yourscript> --file=outfile -q
|
---|
37 | \end{verbatim}
|
---|
38 |
|
---|
39 | As it parses the command line, \code{optparse} sets attributes of the
|
---|
40 | \code{options} object returned by \method{parse{\_}args()} based on user-supplied
|
---|
41 | command-line values. When \method{parse{\_}args()} returns from parsing this
|
---|
42 | command line, \code{options.filename} will be \code{"outfile"} and
|
---|
43 | \code{options.verbose} will be \code{False}. \code{optparse} supports both long
|
---|
44 | and short options, allows short options to be merged together, and
|
---|
45 | allows options to be associated with their arguments in a variety of
|
---|
46 | ways. Thus, the following command lines are all equivalent to the above
|
---|
47 | example:
|
---|
48 | \begin{verbatim}
|
---|
49 | <yourscript> -f outfile --quiet
|
---|
50 | <yourscript> --quiet --file outfile
|
---|
51 | <yourscript> -q -foutfile
|
---|
52 | <yourscript> -qfoutfile
|
---|
53 | \end{verbatim}
|
---|
54 |
|
---|
55 | Additionally, users can run one of
|
---|
56 | \begin{verbatim}
|
---|
57 | <yourscript> -h
|
---|
58 | <yourscript> --help
|
---|
59 | \end{verbatim}
|
---|
60 |
|
---|
61 | and \code{optparse} will print out a brief summary of your script's
|
---|
62 | options:
|
---|
63 | \begin{verbatim}
|
---|
64 | usage: <yourscript> [options]
|
---|
65 |
|
---|
66 | options:
|
---|
67 | -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
|
---|
70 | \end{verbatim}
|
---|
71 |
|
---|
72 | where the value of \emph{yourscript} is determined at runtime (normally
|
---|
73 | from \code{sys.argv{[}0]}).
|
---|
74 | % $Id: intro.txt 413 2004-09-28 00:59:13Z greg $
|
---|
75 |
|
---|
76 |
|
---|
77 | \subsection{Background\label{optparse-background}}
|
---|
78 |
|
---|
79 | \module{optparse} was explicitly designed to encourage the creation of programs with
|
---|
80 | straightforward, conventional command-line interfaces. To that end, it
|
---|
81 | supports only the most common command-line syntax and semantics
|
---|
82 | conventionally used under \UNIX{}. If you are unfamiliar with these
|
---|
83 | conventions, read this section to acquaint yourself with them.
|
---|
84 |
|
---|
85 |
|
---|
86 | \subsubsection{Terminology\label{optparse-terminology}}
|
---|
87 | \begin{description}
|
---|
88 | \item[argument]
|
---|
89 | a 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
|
---|
92 | executed). \UNIX{} shells also use the term ``word''.
|
---|
93 |
|
---|
94 | It is occasionally desirable to substitute an argument list other
|
---|
95 | than \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 ]
|
---|
99 | an argument used to supply extra information to guide or customize the
|
---|
100 | execution of a program. There are many different syntaxes for
|
---|
101 | options; the traditional \UNIX{} syntax is a hyphen (``-'') followed by a
|
---|
102 | single letter, e.g. \code{"-x"} or \code{"-F"}. Also, traditional \UNIX{}
|
---|
103 | syntax allows multiple options to be merged into a single argument,
|
---|
104 | e.g. \code{"-x -F"} is equivalent to \code{"-xF"}. The GNU project
|
---|
105 | introduced \code{"-{}-"} followed by a series of hyphen-separated words,
|
---|
106 | e.g. \code{"-{}-file"} or \code{"-{}-dry-run"}. These are the only two option
|
---|
107 | syntaxes provided by \module{optparse}.
|
---|
108 |
|
---|
109 | Some other option syntaxes that the world has seen include:
|
---|
110 | \begin{itemize}
|
---|
111 | \item {}
|
---|
112 | a 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 {}
|
---|
116 | a hyphen followed by a whole word, e.g. \code{"-file"} (this is
|
---|
117 | technically equivalent to the previous syntax, but they aren't
|
---|
118 | usually seen in the same program)
|
---|
119 |
|
---|
120 | \item {}
|
---|
121 | a plus sign followed by a single letter, or a few letters,
|
---|
122 | or a word, e.g. \code{"+f"}, \code{"+rgb"}
|
---|
123 |
|
---|
124 | \item {}
|
---|
125 | a slash followed by a letter, or a few letters, or a word, e.g.
|
---|
126 | \code{"/f"}, \code{"/file"}
|
---|
127 |
|
---|
128 | \end{itemize}
|
---|
129 |
|
---|
130 | These option syntaxes are not supported by \module{optparse}, and they never will
|
---|
131 | be. This is deliberate: the first three are non-standard on any
|
---|
132 | environment, and the last only makes sense if you're exclusively
|
---|
133 | targeting VMS, MS-DOS, and/or Windows.
|
---|
134 | \item[option argument]
|
---|
135 | an argument that follows an option, is closely associated with that
|
---|
136 | option, and is consumed from the argument list when that option is.
|
---|
137 | With \module{optparse}, option arguments may either be in a separate argument
|
---|
138 | from their option:
|
---|
139 | \begin{verbatim}
|
---|
140 | -f foo
|
---|
141 | --file foo
|
---|
142 | \end{verbatim}
|
---|
143 |
|
---|
144 | or included in the same argument:
|
---|
145 | \begin{verbatim}
|
---|
146 | -ffoo
|
---|
147 | --file=foo
|
---|
148 | \end{verbatim}
|
---|
149 |
|
---|
150 | Typically, a given option either takes an argument or it doesn't.
|
---|
151 | Lots of people want an ``optional option arguments'' feature, meaning
|
---|
152 | that some options will take an argument if they see it, and won't if
|
---|
153 | they don't. This is somewhat controversial, because it makes parsing
|
---|
154 | ambiguous: if \code{"-a"} takes an optional argument and \code{"-b"} is
|
---|
155 | another option entirely, how do we interpret \code{"-ab"}? Because of
|
---|
156 | this ambiguity, \module{optparse} does not support this feature.
|
---|
157 | \item[positional argument]
|
---|
158 | something leftover in the argument list after options have been
|
---|
159 | parsed, i.e. after options and their arguments have been parsed and
|
---|
160 | removed from the argument list.
|
---|
161 | \item[required option]
|
---|
162 | an option that must be supplied on the command-line; note that the
|
---|
163 | phrase ``required option'' is self-contradictory in English. \module{optparse}
|
---|
164 | doesn't prevent you from implementing required options, but doesn't
|
---|
165 | give 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
|
---|
167 | ways to implement required options with \module{optparse}.
|
---|
168 | \end{description}
|
---|
169 |
|
---|
170 | For example, consider this hypothetical command-line:
|
---|
171 | \begin{verbatim}
|
---|
172 | prog -v --report /tmp/report.txt foo bar
|
---|
173 | \end{verbatim}
|
---|
174 |
|
---|
175 | \code{"-v"} and \code{"-{}-report"} are both options. Assuming that
|
---|
176 | \longprogramopt{report} takes one argument, \code{"/tmp/report.txt"} is an option
|
---|
177 | argument. \code{"foo"} and \code{"bar"} are positional arguments.
|
---|
178 |
|
---|
179 |
|
---|
180 | \subsubsection{What are options for?\label{optparse-what-options-for}}
|
---|
181 |
|
---|
182 | Options are used to provide extra information to tune or customize the
|
---|
183 | execution 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
|
---|
185 | whatsoever. (Pick a random program from the \UNIX{} or GNU toolsets. Can
|
---|
186 | it run without any options at all and still make sense? The main
|
---|
187 | exceptions are \code{find}, \code{tar}, and \code{dd}{---}all of which are mutant
|
---|
188 | oddballs that have been rightly criticized for their non-standard syntax
|
---|
189 | and confusing interfaces.)
|
---|
190 |
|
---|
191 | Lots of people want their programs to have ``required options''. Think
|
---|
192 | about it. If it's required, then it's \emph{not optional}! If there is a
|
---|
193 | piece of information that your program absolutely requires in order to
|
---|
194 | run successfully, that's what positional arguments are for.
|
---|
195 |
|
---|
196 | As 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
|
---|
198 | copy files without supplying a destination and at least one source.
|
---|
199 | Hence, \code{cp} fails if you run it with no arguments. However, it has a
|
---|
200 | flexible, useful syntax that does not require any options at all:
|
---|
201 | \begin{verbatim}
|
---|
202 | cp SOURCE DEST
|
---|
203 | cp SOURCE ... DEST-DIR
|
---|
204 | \end{verbatim}
|
---|
205 |
|
---|
206 | You can get pretty far with just that. Most \code{cp} implementations
|
---|
207 | provide a bunch of options to tweak exactly how the files are copied:
|
---|
208 | you can preserve mode and modification time, avoid following symlinks,
|
---|
209 | ask before clobbering existing files, etc. But none of this distracts
|
---|
210 | from the core mission of \code{cp}, which is to copy either one file to
|
---|
211 | another, or several files to another directory.
|
---|
212 |
|
---|
213 |
|
---|
214 | \subsubsection{What are positional arguments for?\label{optparse-what-positional-arguments-for}}
|
---|
215 |
|
---|
216 | Positional arguments are for those pieces of information that your
|
---|
217 | program absolutely, positively requires to run.
|
---|
218 |
|
---|
219 | A good user interface should have as few absolute requirements as
|
---|
220 | possible. If your program requires 17 distinct pieces of information in
|
---|
221 | order to run successfully, it doesn't much matter \emph{how} you get that
|
---|
222 | information from the user{---}most people will give up and walk away
|
---|
223 | before they successfully run the program. This applies whether the user
|
---|
224 | interface is a command-line, a configuration file, or a GUI: if you make
|
---|
225 | that many demands on your users, most of them will simply give up.
|
---|
226 |
|
---|
227 | In short, try to minimize the amount of information that users are
|
---|
228 | absolutely required to supply{---}use sensible defaults whenever
|
---|
229 | possible. Of course, you also want to make your programs reasonably
|
---|
230 | flexible. That's what options are for. Again, it doesn't matter if
|
---|
231 | they are entries in a config file, widgets in the ``Preferences'' dialog
|
---|
232 | of a GUI, or command-line options{---}the more options you implement, the
|
---|
233 | more flexible your program is, and the more complicated its
|
---|
234 | implementation becomes. Too much flexibility has drawbacks as well, of
|
---|
235 | course; too many options can overwhelm users and make your code much
|
---|
236 | harder to maintain.
|
---|
237 | % $Id: tao.txt 413 2004-09-28 00:59:13Z greg $
|
---|
238 |
|
---|
239 |
|
---|
240 | \subsection{Tutorial\label{optparse-tutorial}}
|
---|
241 |
|
---|
242 | While \module{optparse} is quite flexible and powerful, it's also straightforward to
|
---|
243 | use in most cases. This section covers the code patterns that are
|
---|
244 | common to any \module{optparse}-based program.
|
---|
245 |
|
---|
246 | First, you need to import the OptionParser class; then, early in the
|
---|
247 | main program, create an OptionParser instance:
|
---|
248 | \begin{verbatim}
|
---|
249 | from optparse import OptionParser
|
---|
250 | [...]
|
---|
251 | parser = OptionParser()
|
---|
252 | \end{verbatim}
|
---|
253 |
|
---|
254 | Then you can start defining options. The basic syntax is:
|
---|
255 | \begin{verbatim}
|
---|
256 | parser.add_option(opt_str, ...,
|
---|
257 | attr=value, ...)
|
---|
258 | \end{verbatim}
|
---|
259 |
|
---|
260 | Each option has one or more option strings, such as \code{"-f"} or
|
---|
261 | \code{"-{}-file"}, and several option attributes that tell \module{optparse} what to
|
---|
262 | expect and what to do when it encounters that option on the command
|
---|
263 | line.
|
---|
264 |
|
---|
265 | Typically, each option will have one short option string and one long
|
---|
266 | option string, e.g.:
|
---|
267 | \begin{verbatim}
|
---|
268 | parser.add_option("-f", "--file", ...)
|
---|
269 | \end{verbatim}
|
---|
270 |
|
---|
271 | You're free to define as many short option strings and as many long
|
---|
272 | option strings as you like (including zero), as long as there is at
|
---|
273 | least one option string overall.
|
---|
274 |
|
---|
275 | The option strings passed to \method{add{\_}option()} are effectively labels for
|
---|
276 | the option defined by that call. For brevity, we will frequently refer
|
---|
277 | to \emph{encountering an option} on the command line; in reality, \module{optparse}
|
---|
278 | encounters \emph{option strings} and looks up options from them.
|
---|
279 |
|
---|
280 | Once all of your options are defined, instruct \module{optparse} to parse your
|
---|
281 | program's command line:
|
---|
282 | \begin{verbatim}
|
---|
283 | (options, args) = parser.parse_args()
|
---|
284 | \end{verbatim}
|
---|
285 |
|
---|
286 | (If you like, you can pass a custom argument list to \method{parse{\_}args()},
|
---|
287 | but that's rarely necessary: by default it uses \code{sys.argv{[}1:]}.)
|
---|
288 |
|
---|
289 | \method{parse{\_}args()} returns two values:
|
---|
290 | \begin{itemize}
|
---|
291 | \item {}
|
---|
292 | \code{options}, an object containing values for all of your options{---}e.g. if \code{"-{}-file"} takes a single string argument, then
|
---|
293 | \code{options.file} will be the filename supplied by the user, or
|
---|
294 | \code{None} if the user did not supply that option
|
---|
295 |
|
---|
296 | \item {}
|
---|
297 | \code{args}, the list of positional arguments leftover after parsing
|
---|
298 | options
|
---|
299 |
|
---|
300 | \end{itemize}
|
---|
301 |
|
---|
302 | This tutorial section only covers the four most important option
|
---|
303 | attributes: \member{action}, \member{type}, \member{dest} (destination), and \member{help}.
|
---|
304 | Of these, \member{action} is the most fundamental.
|
---|
305 |
|
---|
306 |
|
---|
307 | \subsubsection{Understanding option actions\label{optparse-understanding-option-actions}}
|
---|
308 |
|
---|
309 | Actions tell \module{optparse} what to do when it encounters an option on the
|
---|
310 | command line. There is a fixed set of actions hard-coded into \module{optparse};
|
---|
311 | adding new actions is an advanced topic covered in section~\ref{optparse-extending-optparse}, Extending \module{optparse}.
|
---|
312 | Most actions tell \module{optparse} to store a value in some variable{---}for
|
---|
313 | example, take a string from the command line and store it in an
|
---|
314 | attribute of \code{options}.
|
---|
315 |
|
---|
316 | If you don't specify an option action, \module{optparse} defaults to \code{store}.
|
---|
317 |
|
---|
318 |
|
---|
319 | \subsubsection{The store action\label{optparse-store-action}}
|
---|
320 |
|
---|
321 | The most common option action is \code{store}, which tells \module{optparse} to take
|
---|
322 | the next argument (or the remainder of the current argument), ensure
|
---|
323 | that it is of the correct type, and store it to your chosen destination.
|
---|
324 |
|
---|
325 | For example:
|
---|
326 | \begin{verbatim}
|
---|
327 | parser.add_option("-f", "--file",
|
---|
328 | action="store", type="string", dest="filename")
|
---|
329 | \end{verbatim}
|
---|
330 |
|
---|
331 | Now let's make up a fake command line and ask \module{optparse} to parse it:
|
---|
332 | \begin{verbatim}
|
---|
333 | args = ["-f", "foo.txt"]
|
---|
334 | (options, args) = parser.parse_args(args)
|
---|
335 | \end{verbatim}
|
---|
336 |
|
---|
337 | When \module{optparse} sees the option string \code{"-f"}, it consumes the next
|
---|
338 | argument, \code{"foo.txt"}, and stores it in \code{options.filename}. So,
|
---|
339 | after this call to \method{parse{\_}args()}, \code{options.filename} is
|
---|
340 | \code{"foo.txt"}.
|
---|
341 |
|
---|
342 | Some other option types supported by \module{optparse} are \code{int} and \code{float}.
|
---|
343 | Here's an option that expects an integer argument:
|
---|
344 | \begin{verbatim}
|
---|
345 | parser.add_option("-n", type="int", dest="num")
|
---|
346 | \end{verbatim}
|
---|
347 |
|
---|
348 | Note that this option has no long option string, which is perfectly
|
---|
349 | acceptable. Also, there's no explicit action, since the default is
|
---|
350 | \code{store}.
|
---|
351 |
|
---|
352 | Let's parse another fake command-line. This time, we'll jam the option
|
---|
353 | argument right up against the option: since \code{"-n42"} (one argument) is
|
---|
354 | equivalent to \code{"-n 42"} (two arguments), the code
|
---|
355 | \begin{verbatim}
|
---|
356 | (options, args) = parser.parse_args(["-n42"])
|
---|
357 | print options.num
|
---|
358 | \end{verbatim}
|
---|
359 |
|
---|
360 | will print \code{"42"}.
|
---|
361 |
|
---|
362 | If you don't specify a type, \module{optparse} assumes \code{string}. Combined with the
|
---|
363 | fact that the default action is \code{store}, that means our first example
|
---|
364 | can be a lot shorter:
|
---|
365 | \begin{verbatim}
|
---|
366 | parser.add_option("-f", "--file", dest="filename")
|
---|
367 | \end{verbatim}
|
---|
368 |
|
---|
369 | If you don't supply a destination, \module{optparse} figures out a sensible default
|
---|
370 | from the option strings: if the first long option string is
|
---|
371 | \code{"-{}-foo-bar"}, then the default destination is \code{foo{\_}bar}. If there
|
---|
372 | are no long option strings, \module{optparse} looks at the first short option
|
---|
373 | string: the default destination for \code{"-f"} is \code{f}.
|
---|
374 |
|
---|
375 | \module{optparse} also includes built-in \code{long} and \code{complex} types. Adding
|
---|
376 | types is covered in section~\ref{optparse-extending-optparse}, Extending \module{optparse}.
|
---|
377 |
|
---|
378 |
|
---|
379 | \subsubsection{Handling boolean (flag) options\label{optparse-handling-boolean-options}}
|
---|
380 |
|
---|
381 | Flag options{---}set a variable to true or false when a particular option
|
---|
382 | is seen{---}are quite common. \module{optparse} supports them with two separate
|
---|
383 | actions, \code{store{\_}true} and \code{store{\_}false}. For example, you might have a
|
---|
384 | \code{verbose} flag that is turned on with \code{"-v"} and off with \code{"-q"}:
|
---|
385 | \begin{verbatim}
|
---|
386 | parser.add_option("-v", action="store_true", dest="verbose")
|
---|
387 | parser.add_option("-q", action="store_false", dest="verbose")
|
---|
388 | \end{verbatim}
|
---|
389 |
|
---|
390 | Here we have two different options with the same destination, which is
|
---|
391 | perfectly OK. (It just means you have to be a bit careful when setting
|
---|
392 | default values{---}see below.)
|
---|
393 |
|
---|
394 | When \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}.
|
---|
397 |
|
---|
398 |
|
---|
399 | \subsubsection{Other actions\label{optparse-other-actions}}
|
---|
400 |
|
---|
401 | Some other actions supported by \module{optparse} are:
|
---|
402 | \begin{description}
|
---|
403 | \item[\code{store{\_}const}]
|
---|
404 | store a constant value
|
---|
405 | \item[\code{append}]
|
---|
406 | append this option's argument to a list
|
---|
407 | \item[\code{count}]
|
---|
408 | increment a counter by one
|
---|
409 | \item[\code{callback}]
|
---|
410 | call a specified function
|
---|
411 | \end{description}
|
---|
412 |
|
---|
413 | These are covered in section~\ref{optparse-reference-guide}, Reference Guide and section~\ref{optparse-option-callbacks}, Option Callbacks.
|
---|
414 |
|
---|
415 |
|
---|
416 | \subsubsection{Default values\label{optparse-default-values}}
|
---|
417 |
|
---|
418 | All of the above examples involve setting some variable (the
|
---|
419 | ``destination'') when certain command-line options are seen. What happens
|
---|
420 | if those options are never seen? Since we didn't supply any defaults,
|
---|
421 | they are all set to \code{None}. This is usually fine, but sometimes you
|
---|
422 | want more control. \module{optparse} lets you supply a default value for each
|
---|
423 | destination, which is assigned before the command line is parsed.
|
---|
424 |
|
---|
425 | First, consider the verbose/quiet example. If we want \module{optparse} to set
|
---|
426 | \code{verbose} to \code{True} unless \code{"-q"} is seen, then we can do this:
|
---|
427 | \begin{verbatim}
|
---|
428 | parser.add_option("-v", action="store_true", dest="verbose", default=True)
|
---|
429 | parser.add_option("-q", action="store_false", dest="verbose")
|
---|
430 | \end{verbatim}
|
---|
431 |
|
---|
432 | Since default values apply to the \emph{destination} rather than to any
|
---|
433 | particular option, and these two options happen to have the same
|
---|
434 | destination, this is exactly equivalent:
|
---|
435 | \begin{verbatim}
|
---|
436 | parser.add_option("-v", action="store_true", dest="verbose")
|
---|
437 | parser.add_option("-q", action="store_false", dest="verbose", default=True)
|
---|
438 | \end{verbatim}
|
---|
439 |
|
---|
440 | Consider this:
|
---|
441 | \begin{verbatim}
|
---|
442 | parser.add_option("-v", action="store_true", dest="verbose", default=False)
|
---|
443 | parser.add_option("-q", action="store_false", dest="verbose", default=True)
|
---|
444 | \end{verbatim}
|
---|
445 |
|
---|
446 | Again, the default value for \code{verbose} will be \code{True}: the last
|
---|
447 | default value supplied for any particular destination is the one that
|
---|
448 | counts.
|
---|
449 |
|
---|
450 | A clearer way to specify default values is the \method{set{\_}defaults()}
|
---|
451 | method of OptionParser, which you can call at any time before calling
|
---|
452 | \method{parse{\_}args()}:
|
---|
453 | \begin{verbatim}
|
---|
454 | parser.set_defaults(verbose=True)
|
---|
455 | parser.add_option(...)
|
---|
456 | (options, args) = parser.parse_args()
|
---|
457 | \end{verbatim}
|
---|
458 |
|
---|
459 | As before, the last value specified for a given option destination is
|
---|
460 | the one that counts. For clarity, try to use one method or the other of
|
---|
461 | setting default values, not both.
|
---|
462 |
|
---|
463 |
|
---|
464 | \subsubsection{Generating help\label{optparse-generating-help}}
|
---|
465 |
|
---|
466 | \module{optparse}'s ability to generate help and usage text automatically is useful
|
---|
467 | for creating user-friendly command-line interfaces. All you have to do
|
---|
468 | is supply a \member{help} value for each option, and optionally a short usage
|
---|
469 | message for your whole program. Here's an OptionParser populated with
|
---|
470 | user-friendly (documented) options:
|
---|
471 | \begin{verbatim}
|
---|
472 | usage = "usage: %prog [options] arg1 arg2"
|
---|
473 | parser = OptionParser(usage=usage)
|
---|
474 | parser.add_option("-v", "--verbose",
|
---|
475 | action="store_true", dest="verbose", default=True,
|
---|
476 | help="make lots of noise [default]")
|
---|
477 | parser.add_option("-q", "--quiet",
|
---|
478 | action="store_false", dest="verbose",
|
---|
479 | help="be vewwy quiet (I'm hunting wabbits)")
|
---|
480 | parser.add_option("-f", "--filename",
|
---|
481 | metavar="FILE", help="write output to FILE"),
|
---|
482 | parser.add_option("-m", "--mode",
|
---|
483 | default="intermediate",
|
---|
484 | help="interaction mode: novice, intermediate, "
|
---|
485 | "or expert [default: %default]")
|
---|
486 | \end{verbatim}
|
---|
487 |
|
---|
488 | If \module{optparse} encounters either \code{"-h"} or \code{"-{}-help"} on the command-line,
|
---|
489 | or if you just call \method{parser.print{\_}help()}, it prints the following to
|
---|
490 | standard output:
|
---|
491 | \begin{verbatim}
|
---|
492 | usage: <yourscript> [options] arg1 arg2
|
---|
493 |
|
---|
494 | options:
|
---|
495 | -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]
|
---|
502 | \end{verbatim}
|
---|
503 |
|
---|
504 | (If the help output is triggered by a help option, \module{optparse} exits after
|
---|
505 | printing the help text.)
|
---|
506 |
|
---|
507 | There's a lot going on here to help \module{optparse} generate the best possible
|
---|
508 | help message:
|
---|
509 | \begin{itemize}
|
---|
510 | \item {}
|
---|
511 | the script defines its own usage message:
|
---|
512 | \begin{verbatim}
|
---|
513 | usage = "usage: %prog [options] arg1 arg2"
|
---|
514 | \end{verbatim}
|
---|
515 |
|
---|
516 | \module{optparse} expands \code{"{\%}prog"} in the usage string to the name of the current
|
---|
517 | program, i.e. \code{os.path.basename(sys.argv{[}0])}. The expanded string
|
---|
518 | is then printed before the detailed option help.
|
---|
519 |
|
---|
520 | If you don't supply a usage string, \module{optparse} uses a bland but sensible
|
---|
521 | default: ``\code{usage: {\%}prog {[}options]"}, which is fine if your script
|
---|
522 | doesn't take any positional arguments.
|
---|
523 |
|
---|
524 | \item {}
|
---|
525 | every option defines a help string, and doesn't worry about line-
|
---|
526 | wrapping{---}\module{optparse} takes care of wrapping lines and making the
|
---|
527 | help output look good.
|
---|
528 |
|
---|
529 | \item {}
|
---|
530 | options that take a value indicate this fact in their
|
---|
531 | automatically-generated help message, e.g. for the ``mode'' option:
|
---|
532 | \begin{verbatim}
|
---|
533 | -m MODE, --mode=MODE
|
---|
534 | \end{verbatim}
|
---|
535 |
|
---|
536 | Here, ``MODE'' is called the meta-variable: it stands for the argument
|
---|
537 | that 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
|
---|
539 | that 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
|
---|
541 | description:
|
---|
542 | \begin{verbatim}
|
---|
543 | -f FILE, --filename=FILE
|
---|
544 | \end{verbatim}
|
---|
545 |
|
---|
546 | This is important for more than just saving space, though: the
|
---|
547 | manually written help text uses the meta-variable ``FILE'' to clue the
|
---|
548 | user in that there's a connection between the semi-formal syntax ``-f
|
---|
549 | FILE'' and the informal semantic description ``write output to FILE''.
|
---|
550 | This is a simple but effective way to make your help text a lot
|
---|
551 | clearer and more useful for end users.
|
---|
552 |
|
---|
553 | \item {}
|
---|
554 | options that have a default value can include \code{{\%}default} in
|
---|
555 | the help string{---}\module{optparse} will replace it with \function{str()} of the
|
---|
556 | option's default value. If an option has no default value (or the
|
---|
557 | default value is \code{None}), \code{{\%}default} expands to \code{none}.
|
---|
558 |
|
---|
559 | \end{itemize}
|
---|
560 |
|
---|
561 |
|
---|
562 | \subsubsection{Printing a version string\label{optparse-printing-version-string}}
|
---|
563 |
|
---|
564 | Similar to the brief usage string, \module{optparse} can also print a version string
|
---|
565 | for your program. You have to supply the string as the \code{version}
|
---|
566 | argument to OptionParser:
|
---|
567 | \begin{verbatim}
|
---|
568 | parser = OptionParser(usage="%prog [-f] [-q]", version="%prog 1.0")
|
---|
569 | \end{verbatim}
|
---|
570 |
|
---|
571 | \code{"{\%}prog"} is expanded just like it is in \code{usage}. Apart
|
---|
572 | from that, \code{version} can contain anything you like. When you supply
|
---|
573 | it, \module{optparse} automatically adds a \code{"-{}-version"} option to your parser.
|
---|
574 | If it encounters this option on the command line, it expands your
|
---|
575 | \code{version} string (by replacing \code{"{\%}prog"}), prints it to stdout, and
|
---|
576 | exits.
|
---|
577 |
|
---|
578 | For example, if your script is called \code{/usr/bin/foo}:
|
---|
579 | \begin{verbatim}
|
---|
580 | $ /usr/bin/foo --version
|
---|
581 | foo 1.0
|
---|
582 | \end{verbatim}
|
---|
583 |
|
---|
584 |
|
---|
585 | \subsubsection{How \module{optparse} handles errors\label{optparse-how-optparse-handles-errors}}
|
---|
586 |
|
---|
587 | There are two broad classes of errors that \module{optparse} has to worry about:
|
---|
588 | programmer errors and user errors. Programmer errors are usually
|
---|
589 | erroneous calls to \code{parser.add{\_}option()}, e.g. invalid option strings,
|
---|
590 | unknown option attributes, missing option attributes, etc. These are
|
---|
591 | dealt with in the usual way: raise an exception (either
|
---|
592 | \code{optparse.OptionError} or \code{TypeError}) and let the program crash.
|
---|
593 |
|
---|
594 | Handling user errors is much more important, since they are guaranteed
|
---|
595 | to happen no matter how stable your code is. \module{optparse} can automatically
|
---|
596 | detect some user errors, such as bad option arguments (passing \code{"-n
|
---|
597 | 4x"} where \programopt{-n} takes an integer argument), missing arguments
|
---|
598 | (\code{"-n"} at the end of the command line, where \programopt{-n} takes an argument
|
---|
599 | of any type). Also, you can call \code{parser.error()} to signal an
|
---|
600 | application-defined error condition:
|
---|
601 | \begin{verbatim}
|
---|
602 | (options, args) = parser.parse_args()
|
---|
603 | [...]
|
---|
604 | if options.a and options.b:
|
---|
605 | parser.error("options -a and -b are mutually exclusive")
|
---|
606 | \end{verbatim}
|
---|
607 |
|
---|
608 | In either case, \module{optparse} handles the error the same way: it prints the
|
---|
609 | program's usage message and an error message to standard error and
|
---|
610 | exits with error status 2.
|
---|
611 |
|
---|
612 | Consider the first example above, where the user passes \code{"4x"} to an
|
---|
613 | option that takes an integer:
|
---|
614 | \begin{verbatim}
|
---|
615 | $ /usr/bin/foo -n 4x
|
---|
616 | usage: foo [options]
|
---|
617 |
|
---|
618 | foo: error: option -n: invalid integer value: '4x'
|
---|
619 | \end{verbatim}
|
---|
620 |
|
---|
621 | Or, where the user fails to pass a value at all:
|
---|
622 | \begin{verbatim}
|
---|
623 | $ /usr/bin/foo -n
|
---|
624 | usage: foo [options]
|
---|
625 |
|
---|
626 | foo: error: -n option requires an argument
|
---|
627 | \end{verbatim}
|
---|
628 |
|
---|
629 | \module{optparse}-generated error messages take care always to mention the option
|
---|
630 | involved in the error; be sure to do the same when calling
|
---|
631 | \code{parser.error()} from your application code.
|
---|
632 |
|
---|
633 | If \module{optparse}'s default error-handling behaviour does not suite your needs,
|
---|
634 | you'll need to subclass OptionParser and override \code{exit()} and/or
|
---|
635 | \method{error()}.
|
---|
636 |
|
---|
637 |
|
---|
638 | \subsubsection{Putting it all together\label{optparse-putting-it-all-together}}
|
---|
639 |
|
---|
640 | Here's what \module{optparse}-based scripts usually look like:
|
---|
641 | \begin{verbatim}
|
---|
642 | from optparse import OptionParser
|
---|
643 | [...]
|
---|
644 | def main():
|
---|
645 | usage = "usage: %prog [options] arg"
|
---|
646 | parser = OptionParser(usage)
|
---|
647 | parser.add_option("-f", "--file", dest="filename",
|
---|
648 | help="read data from FILENAME")
|
---|
649 | parser.add_option("-v", "--verbose",
|
---|
650 | action="store_true", dest="verbose")
|
---|
651 | parser.add_option("-q", "--quiet",
|
---|
652 | action="store_false", dest="verbose")
|
---|
653 | [...]
|
---|
654 | (options, args) = parser.parse_args()
|
---|
655 | if len(args) != 1:
|
---|
656 | parser.error("incorrect number of arguments")
|
---|
657 | if options.verbose:
|
---|
658 | print "reading %s..." % options.filename
|
---|
659 | [...]
|
---|
660 |
|
---|
661 | if __name__ == "__main__":
|
---|
662 | main()
|
---|
663 | \end{verbatim}
|
---|
664 | % $Id: tutorial.txt 515 2006-06-10 15:37:45Z gward $
|
---|
665 |
|
---|
666 |
|
---|
667 | \subsection{Reference Guide\label{optparse-reference-guide}}
|
---|
668 |
|
---|
669 |
|
---|
670 | \subsubsection{Creating the parser\label{optparse-creating-parser}}
|
---|
671 |
|
---|
672 | The first step in using \module{optparse} is to create an OptionParser instance:
|
---|
673 | \begin{verbatim}
|
---|
674 | parser = OptionParser(...)
|
---|
675 | \end{verbatim}
|
---|
676 |
|
---|
677 | The OptionParser constructor has no required arguments, but a number of
|
---|
678 | optional keyword arguments. You should always pass them as keyword
|
---|
679 | arguments, i.e. do not rely on the order in which the arguments are
|
---|
680 | declared.
|
---|
681 | \begin{quote}
|
---|
682 | \begin{description}
|
---|
683 | \item[\code{usage} (default: \code{"{\%}prog {[}options]"})]
|
---|
684 | The usage summary to print when your program is run incorrectly or
|
---|
685 | with a help option. When \module{optparse} prints the usage string, it expands
|
---|
686 | \code{{\%}prog} to \code{os.path.basename(sys.argv{[}0])} (or to \code{prog} if
|
---|
687 | you passed that keyword argument). To suppress a usage message,
|
---|
688 | pass the special value \code{optparse.SUPPRESS{\_}USAGE}.
|
---|
689 | \item[\code{option{\_}list} (default: \code{{[}]})]
|
---|
690 | A list of Option objects to populate the parser with. The options
|
---|
691 | in \code{option{\_}list} are added after any options in
|
---|
692 | \code{standard{\_}option{\_}list} (a class attribute that may be set by
|
---|
693 | OptionParser subclasses), but before any version or help options.
|
---|
694 | Deprecated; use \method{add{\_}option()} after creating the parser instead.
|
---|
695 | \item[\code{option{\_}class} (default: optparse.Option)]
|
---|
696 | Class to use when adding options to the parser in \method{add{\_}option()}.
|
---|
697 | \item[\code{version} (default: \code{None})]
|
---|
698 | A version string to print when the user supplies a version option.
|
---|
699 | If you supply a true value for \code{version}, \module{optparse} automatically adds
|
---|
700 | a version option with the single option string \code{"-{}-version"}. The
|
---|
701 | substring \code{"{\%}prog"} is expanded the same as for \code{usage}.
|
---|
702 | \item[\code{conflict{\_}handler} (default: \code{"error"})]
|
---|
703 | Specifies what to do when options with conflicting option strings
|
---|
704 | are added to the parser; see section~\ref{optparse-conflicts-between-options}, Conflicts between options.
|
---|
705 | \item[\code{description} (default: \code{None})]
|
---|
706 | A paragraph of text giving a brief overview of your program. \module{optparse}
|
---|
707 | reformats this paragraph to fit the current terminal width and
|
---|
708 | prints it when the user requests help (after \code{usage}, but before
|
---|
709 | the list of options).
|
---|
710 | \item[\code{formatter} (default: a new IndentedHelpFormatter)]
|
---|
711 | An instance of optparse.HelpFormatter that will be used for
|
---|
712 | printing help text. \module{optparse} provides two concrete classes for this
|
---|
713 | purpose: IndentedHelpFormatter and TitledHelpFormatter.
|
---|
714 | \item[\code{add{\_}help{\_}option} (default: \code{True})]
|
---|
715 | If true, \module{optparse} will add a help option (with option strings \code{"-h"}
|
---|
716 | and \code{"-{}-help"}) to the parser.
|
---|
717 | \item[\code{prog}]
|
---|
718 | The string to use when expanding \code{"{\%}prog"} in \code{usage} and
|
---|
719 | \code{version} instead of \code{os.path.basename(sys.argv{[}0])}.
|
---|
720 | \end{description}
|
---|
721 | \end{quote}
|
---|
722 |
|
---|
723 |
|
---|
724 | \subsubsection{Populating the parser\label{optparse-populating-parser}}
|
---|
725 |
|
---|
726 | There are several ways to populate the parser with options. The
|
---|
727 | preferred way is by using \code{OptionParser.add{\_}option()}, as shown in
|
---|
728 | section~\ref{optparse-tutorial}, the tutorial. \method{add{\_}option()} can be called in one of two
|
---|
729 | ways:
|
---|
730 | \begin{itemize}
|
---|
731 | \item {}
|
---|
732 | pass it an Option instance (as returned by \function{make{\_}option()})
|
---|
733 |
|
---|
734 | \item {}
|
---|
735 | pass it any combination of positional and keyword arguments that are
|
---|
736 | acceptable to \function{make{\_}option()} (i.e., to the Option constructor),
|
---|
737 | and it will create the Option instance for you
|
---|
738 |
|
---|
739 | \end{itemize}
|
---|
740 |
|
---|
741 | The other alternative is to pass a list of pre-constructed Option
|
---|
742 | instances to the OptionParser constructor, as in:
|
---|
743 | \begin{verbatim}
|
---|
744 | option_list = [
|
---|
745 | make_option("-f", "--filename",
|
---|
746 | action="store", type="string", dest="filename"),
|
---|
747 | make_option("-q", "--quiet",
|
---|
748 | action="store_false", dest="verbose"),
|
---|
749 | ]
|
---|
750 | parser = OptionParser(option_list=option_list)
|
---|
751 | \end{verbatim}
|
---|
752 |
|
---|
753 | (\function{make{\_}option()} is a factory function for creating Option instances;
|
---|
754 | currently it is an alias for the Option constructor. A future version
|
---|
755 | of \module{optparse} may split Option into several classes, and \function{make{\_}option()}
|
---|
756 | will pick the right class to instantiate. Do not instantiate Option
|
---|
757 | directly.)
|
---|
758 |
|
---|
759 |
|
---|
760 | \subsubsection{Defining options\label{optparse-defining-options}}
|
---|
761 |
|
---|
762 | Each Option instance represents a set of synonymous command-line option
|
---|
763 | strings, e.g. \programopt{-f} and \longprogramopt{file}. You can
|
---|
764 | specify any number of short or long option strings, but you must specify
|
---|
765 | at least one overall option string.
|
---|
766 |
|
---|
767 | The canonical way to create an Option instance is with the
|
---|
768 | \method{add{\_}option()} method of \class{OptionParser}:
|
---|
769 | \begin{verbatim}
|
---|
770 | parser.add_option(opt_str[, ...], attr=value, ...)
|
---|
771 | \end{verbatim}
|
---|
772 |
|
---|
773 | To define an option with only a short option string:
|
---|
774 | \begin{verbatim}
|
---|
775 | parser.add_option("-f", attr=value, ...)
|
---|
776 | \end{verbatim}
|
---|
777 |
|
---|
778 | And to define an option with only a long option string:
|
---|
779 | \begin{verbatim}
|
---|
780 | parser.add_option("--foo", attr=value, ...)
|
---|
781 | \end{verbatim}
|
---|
782 |
|
---|
783 | The keyword arguments define attributes of the new Option object. The
|
---|
784 | most important option attribute is \member{action}, and it largely determines
|
---|
785 | which other attributes are relevant or required. If you pass irrelevant
|
---|
786 | option attributes, or fail to pass required ones, \module{optparse} raises an
|
---|
787 | OptionError exception explaining your mistake.
|
---|
788 |
|
---|
789 | An options's \emph{action} determines what \module{optparse} does when it encounters this
|
---|
790 | option on the command-line. The standard option actions hard-coded into
|
---|
791 | \module{optparse} are:
|
---|
792 | \begin{description}
|
---|
793 | \item[\code{store}]
|
---|
794 | store this option's argument (default)
|
---|
795 | \item[\code{store{\_}const}]
|
---|
796 | store a constant value
|
---|
797 | \item[\code{store{\_}true}]
|
---|
798 | store a true value
|
---|
799 | \item[\code{store{\_}false}]
|
---|
800 | store a false value
|
---|
801 | \item[\code{append}]
|
---|
802 | append this option's argument to a list
|
---|
803 | \item[\code{append{\_}const}]
|
---|
804 | append a constant value to a list
|
---|
805 | \item[\code{count}]
|
---|
806 | increment a counter by one
|
---|
807 | \item[\code{callback}]
|
---|
808 | call a specified function
|
---|
809 | \item[\member{help}]
|
---|
810 | print a usage message including all options and the
|
---|
811 | documentation for them
|
---|
812 | \end{description}
|
---|
813 |
|
---|
814 | (If you don't supply an action, the default is \code{store}. For this
|
---|
815 | action, you may also supply \member{type} and \member{dest} option attributes; see
|
---|
816 | below.)
|
---|
817 |
|
---|
818 | As you can see, most actions involve storing or updating a value
|
---|
819 | somewhere. \module{optparse} always creates a special object for this,
|
---|
820 | conventionally called \code{options} (it happens to be an instance of
|
---|
821 | \code{optparse.Values}). Option arguments (and various other values) are
|
---|
822 | stored as attributes of this object, according to the \member{dest}
|
---|
823 | (destination) option attribute.
|
---|
824 |
|
---|
825 | For example, when you call
|
---|
826 | \begin{verbatim}
|
---|
827 | parser.parse_args()
|
---|
828 | \end{verbatim}
|
---|
829 |
|
---|
830 | one of the first things \module{optparse} does is create the \code{options} object:
|
---|
831 | \begin{verbatim}
|
---|
832 | options = Values()
|
---|
833 | \end{verbatim}
|
---|
834 |
|
---|
835 | If one of the options in this parser is defined with
|
---|
836 | \begin{verbatim}
|
---|
837 | parser.add_option("-f", "--file", action="store", type="string", dest="filename")
|
---|
838 | \end{verbatim}
|
---|
839 |
|
---|
840 | and the command-line being parsed includes any of the following:
|
---|
841 | \begin{verbatim}
|
---|
842 | -ffoo
|
---|
843 | -f foo
|
---|
844 | --file=foo
|
---|
845 | --file foo
|
---|
846 | \end{verbatim}
|
---|
847 |
|
---|
848 | then \module{optparse}, on seeing this option, will do the equivalent of
|
---|
849 | \begin{verbatim}
|
---|
850 | options.filename = "foo"
|
---|
851 | \end{verbatim}
|
---|
852 |
|
---|
853 | The \member{type} and \member{dest} option attributes are almost as important as
|
---|
854 | \member{action}, but \member{action} is the only one that makes sense for \emph{all}
|
---|
855 | options.
|
---|
856 |
|
---|
857 |
|
---|
858 | \subsubsection{Standard option actions\label{optparse-standard-option-actions}}
|
---|
859 |
|
---|
860 | The various option actions all have slightly different requirements and
|
---|
861 | effects. Most actions have several relevant option attributes which you
|
---|
862 | may specify to guide \module{optparse}'s behaviour; a few have required attributes,
|
---|
863 | which you must specify for any option using that action.
|
---|
864 | \begin{itemize}
|
---|
865 | \item {}
|
---|
866 | \code{store} {[}relevant: \member{type}, \member{dest}, \code{nargs}, \code{choices}]
|
---|
867 |
|
---|
868 | The option must be followed by an argument, which is
|
---|
869 | converted to a value according to \member{type} and stored in
|
---|
870 | \member{dest}. If \code{nargs} {\textgreater} 1, multiple arguments will be consumed
|
---|
871 | from the command line; all will be converted according to
|
---|
872 | \member{type} and stored to \member{dest} as a tuple. See the ``Option
|
---|
873 | types'' section below.
|
---|
874 |
|
---|
875 | If \code{choices} is supplied (a list or tuple of strings), the type
|
---|
876 | defaults to \code{choice}.
|
---|
877 |
|
---|
878 | If \member{type} is not supplied, it defaults to \code{string}.
|
---|
879 |
|
---|
880 | If \member{dest} is not supplied, \module{optparse} derives a destination from the
|
---|
881 | first long option string (e.g., \code{"-{}-foo-bar"} implies \code{foo{\_}bar}).
|
---|
882 | If there are no long option strings, \module{optparse} derives a destination from
|
---|
883 | the first short option string (e.g., \code{"-f"} implies \code{f}).
|
---|
884 |
|
---|
885 | Example:
|
---|
886 | \begin{verbatim}
|
---|
887 | parser.add_option("-f")
|
---|
888 | parser.add_option("-p", type="float", nargs=3, dest="point")
|
---|
889 | \end{verbatim}
|
---|
890 |
|
---|
891 | As it parses the command line
|
---|
892 | \begin{verbatim}
|
---|
893 | -f foo.txt -p 1 -3.5 4 -fbar.txt
|
---|
894 | \end{verbatim}
|
---|
895 |
|
---|
896 | \module{optparse} will set
|
---|
897 | \begin{verbatim}
|
---|
898 | options.f = "foo.txt"
|
---|
899 | options.point = (1.0, -3.5, 4.0)
|
---|
900 | options.f = "bar.txt"
|
---|
901 | \end{verbatim}
|
---|
902 |
|
---|
903 | \item {}
|
---|
904 | \code{store{\_}const} {[}required: \code{const}; relevant: \member{dest}]
|
---|
905 |
|
---|
906 | The value \code{const} is stored in \member{dest}.
|
---|
907 |
|
---|
908 | Example:
|
---|
909 | \begin{verbatim}
|
---|
910 | parser.add_option("-q", "--quiet",
|
---|
911 | action="store_const", const=0, dest="verbose")
|
---|
912 | parser.add_option("-v", "--verbose",
|
---|
913 | action="store_const", const=1, dest="verbose")
|
---|
914 | parser.add_option("--noisy",
|
---|
915 | action="store_const", const=2, dest="verbose")
|
---|
916 | \end{verbatim}
|
---|
917 |
|
---|
918 | If \code{"-{}-noisy"} is seen, \module{optparse} will set
|
---|
919 | \begin{verbatim}
|
---|
920 | options.verbose = 2
|
---|
921 | \end{verbatim}
|
---|
922 |
|
---|
923 | \item {}
|
---|
924 | \code{store{\_}true} {[}relevant: \member{dest}]
|
---|
925 |
|
---|
926 | A special case of \code{store{\_}const} that stores a true value
|
---|
927 | to \member{dest}.
|
---|
928 |
|
---|
929 | \item {}
|
---|
930 | \code{store{\_}false} {[}relevant: \member{dest}]
|
---|
931 |
|
---|
932 | Like \code{store{\_}true}, but stores a false value.
|
---|
933 |
|
---|
934 | Example:
|
---|
935 | \begin{verbatim}
|
---|
936 | parser.add_option("--clobber", action="store_true", dest="clobber")
|
---|
937 | parser.add_option("--no-clobber", action="store_false", dest="clobber")
|
---|
938 | \end{verbatim}
|
---|
939 |
|
---|
940 | \item {}
|
---|
941 | \code{append} {[}relevant: \member{type}, \member{dest}, \code{nargs}, \code{choices}]
|
---|
942 |
|
---|
943 | The option must be followed by an argument, which is appended to the
|
---|
944 | list in \member{dest}. If no default value for \member{dest} is supplied, an
|
---|
945 | empty list is automatically created when \module{optparse} first encounters this
|
---|
946 | option on the command-line. If \code{nargs} {\textgreater} 1, multiple arguments are
|
---|
947 | consumed, and a tuple of length \code{nargs} is appended to \member{dest}.
|
---|
948 |
|
---|
949 | The defaults for \member{type} and \member{dest} are the same as for the
|
---|
950 | \code{store} action.
|
---|
951 |
|
---|
952 | Example:
|
---|
953 | \begin{verbatim}
|
---|
954 | parser.add_option("-t", "--tracks", action="append", type="int")
|
---|
955 | \end{verbatim}
|
---|
956 |
|
---|
957 | If \code{"-t3"} is seen on the command-line, \module{optparse} does the equivalent of:
|
---|
958 | \begin{verbatim}
|
---|
959 | options.tracks = []
|
---|
960 | options.tracks.append(int("3"))
|
---|
961 | \end{verbatim}
|
---|
962 |
|
---|
963 | If, a little later on, \code{"-{}-tracks=4"} is seen, it does:
|
---|
964 | \begin{verbatim}
|
---|
965 | options.tracks.append(int("4"))
|
---|
966 | \end{verbatim}
|
---|
967 |
|
---|
968 | \item {}
|
---|
969 | \code{append{\_}const} {[}required: \code{const}; relevant: \member{dest}]
|
---|
970 |
|
---|
971 | Like \code{store{\_}const}, but the value \code{const} is appended to \member{dest};
|
---|
972 | as with \code{append}, \member{dest} defaults to \code{None}, and an an empty list is
|
---|
973 | automatically created the first time the option is encountered.
|
---|
974 |
|
---|
975 | \item {}
|
---|
976 | \code{count} {[}relevant: \member{dest}]
|
---|
977 |
|
---|
978 | Increment the integer stored at \member{dest}. If no default value is
|
---|
979 | supplied, \member{dest} is set to zero before being incremented the first
|
---|
980 | time.
|
---|
981 |
|
---|
982 | Example:
|
---|
983 | \begin{verbatim}
|
---|
984 | parser.add_option("-v", action="count", dest="verbosity")
|
---|
985 | \end{verbatim}
|
---|
986 |
|
---|
987 | The first time \code{"-v"} is seen on the command line, \module{optparse} does the
|
---|
988 | equivalent of:
|
---|
989 | \begin{verbatim}
|
---|
990 | options.verbosity = 0
|
---|
991 | options.verbosity += 1
|
---|
992 | \end{verbatim}
|
---|
993 |
|
---|
994 | Every subsequent occurrence of \code{"-v"} results in
|
---|
995 | \begin{verbatim}
|
---|
996 | options.verbosity += 1
|
---|
997 | \end{verbatim}
|
---|
998 |
|
---|
999 | \item {}
|
---|
1000 | \code{callback} {[}required: \code{callback};
|
---|
1001 | relevant: \member{type}, \code{nargs}, \code{callback{\_}args}, \code{callback{\_}kwargs}]
|
---|
1002 |
|
---|
1003 | Call the function specified by \code{callback}, which is called as
|
---|
1004 | \begin{verbatim}
|
---|
1005 | func(option, opt_str, value, parser, *args, **kwargs)
|
---|
1006 | \end{verbatim}
|
---|
1007 |
|
---|
1008 | See section~\ref{optparse-option-callbacks}, Option Callbacks for more detail.
|
---|
1009 |
|
---|
1010 | \item {}
|
---|
1011 | \member{help}
|
---|
1012 |
|
---|
1013 | Prints a complete help message for all the options in the
|
---|
1014 | current option parser. The help message is constructed from
|
---|
1015 | the \code{usage} string passed to OptionParser's constructor and
|
---|
1016 | the \member{help} string passed to every option.
|
---|
1017 |
|
---|
1018 | If no \member{help} string is supplied for an option, it will still be
|
---|
1019 | listed in the help message. To omit an option entirely, use
|
---|
1020 | the special value \code{optparse.SUPPRESS{\_}HELP}.
|
---|
1021 |
|
---|
1022 | \module{optparse} automatically adds a \member{help} option to all OptionParsers, so
|
---|
1023 | you do not normally need to create one.
|
---|
1024 |
|
---|
1025 | Example:
|
---|
1026 | \begin{verbatim}
|
---|
1027 | from optparse import OptionParser, SUPPRESS_HELP
|
---|
1028 |
|
---|
1029 | parser = OptionParser()
|
---|
1030 | parser.add_option("-h", "--help", action="help"),
|
---|
1031 | parser.add_option("-v", action="store_true", dest="verbose",
|
---|
1032 | help="Be moderately verbose")
|
---|
1033 | parser.add_option("--file", dest="filename",
|
---|
1034 | help="Input file to read data from"),
|
---|
1035 | parser.add_option("--secret", help=SUPPRESS_HELP)
|
---|
1036 | \end{verbatim}
|
---|
1037 |
|
---|
1038 | If \module{optparse} sees either \code{"-h"} or \code{"-{}-help"} on the command line, it
|
---|
1039 | will print something like the following help message to stdout
|
---|
1040 | (assuming \code{sys.argv{[}0]} is \code{"foo.py"}):
|
---|
1041 | \begin{verbatim}
|
---|
1042 | usage: foo.py [options]
|
---|
1043 |
|
---|
1044 | options:
|
---|
1045 | -h, --help Show this help message and exit
|
---|
1046 | -v Be moderately verbose
|
---|
1047 | --file=FILENAME Input file to read data from
|
---|
1048 | \end{verbatim}
|
---|
1049 |
|
---|
1050 | After printing the help message, \module{optparse} terminates your process
|
---|
1051 | with \code{sys.exit(0)}.
|
---|
1052 |
|
---|
1053 | \item {}
|
---|
1054 | \code{version}
|
---|
1055 |
|
---|
1056 | Prints the version number supplied to the OptionParser to stdout and
|
---|
1057 | exits. The version number is actually formatted and printed by the
|
---|
1058 | \code{print{\_}version()} method of OptionParser. Generally only relevant
|
---|
1059 | if the \code{version} argument is supplied to the OptionParser
|
---|
1060 | constructor. As with \member{help} options, you will rarely create
|
---|
1061 | \code{version} options, since \module{optparse} automatically adds them when needed.
|
---|
1062 |
|
---|
1063 | \end{itemize}
|
---|
1064 |
|
---|
1065 |
|
---|
1066 | \subsubsection{Option attributes\label{optparse-option-attributes}}
|
---|
1067 |
|
---|
1068 | The following option attributes may be passed as keyword arguments
|
---|
1069 | to \code{parser.add{\_}option()}. If you pass an option attribute
|
---|
1070 | that is not relevant to a particular option, or fail to pass a required
|
---|
1071 | option attribute, \module{optparse} raises OptionError.
|
---|
1072 | \begin{itemize}
|
---|
1073 | \item {}
|
---|
1074 | \member{action} (default: \code{"store"})
|
---|
1075 |
|
---|
1076 | Determines \module{optparse}'s behaviour when this option is seen on the command
|
---|
1077 | line; the available options are documented above.
|
---|
1078 |
|
---|
1079 | \item {}
|
---|
1080 | \member{type} (default: \code{"string"})
|
---|
1081 |
|
---|
1082 | The argument type expected by this option (e.g., \code{"string"} or
|
---|
1083 | \code{"int"}); the available option types are documented below.
|
---|
1084 |
|
---|
1085 | \item {}
|
---|
1086 | \member{dest} (default: derived from option strings)
|
---|
1087 |
|
---|
1088 | If the option's action implies writing or modifying a value somewhere,
|
---|
1089 | this tells \module{optparse} where to write it: \member{dest} names an attribute of the
|
---|
1090 | \code{options} object that \module{optparse} builds as it parses the command line.
|
---|
1091 |
|
---|
1092 | \item {}
|
---|
1093 | \code{default} (deprecated)
|
---|
1094 |
|
---|
1095 | The value to use for this option's destination if the option is not
|
---|
1096 | seen on the command line. Deprecated; use \code{parser.set{\_}defaults()}
|
---|
1097 | instead.
|
---|
1098 |
|
---|
1099 | \item {}
|
---|
1100 | \code{nargs} (default: 1)
|
---|
1101 |
|
---|
1102 | How many arguments of type \member{type} should be consumed when this
|
---|
1103 | option is seen. If {\textgreater} 1, \module{optparse} will store a tuple of values to
|
---|
1104 | \member{dest}.
|
---|
1105 |
|
---|
1106 | \item {}
|
---|
1107 | \code{const}
|
---|
1108 |
|
---|
1109 | For actions that store a constant value, the constant value to store.
|
---|
1110 |
|
---|
1111 | \item {}
|
---|
1112 | \code{choices}
|
---|
1113 |
|
---|
1114 | For options of type \code{"choice"}, the list of strings the user
|
---|
1115 | may choose from.
|
---|
1116 |
|
---|
1117 | \item {}
|
---|
1118 | \code{callback}
|
---|
1119 |
|
---|
1120 | For options with action \code{"callback"}, the callable to call when this
|
---|
1121 | option is seen. See section~\ref{optparse-option-callbacks}, Option Callbacks for detail on the arguments
|
---|
1122 | passed to \code{callable}.
|
---|
1123 |
|
---|
1124 | \item {}
|
---|
1125 | \code{callback{\_}args}, \code{callback{\_}kwargs}
|
---|
1126 |
|
---|
1127 | Additional positional and keyword arguments to pass to \code{callback}
|
---|
1128 | after the four standard callback arguments.
|
---|
1129 |
|
---|
1130 | \item {}
|
---|
1131 | \member{help}
|
---|
1132 |
|
---|
1133 | Help text to print for this option when listing all available options
|
---|
1134 | after the user supplies a \member{help} option (such as \code{"-{}-help"}).
|
---|
1135 | If no help text is supplied, the option will be listed without help
|
---|
1136 | text. To hide this option, use the special value \code{SUPPRESS{\_}HELP}.
|
---|
1137 |
|
---|
1138 | \item {}
|
---|
1139 | \code{metavar} (default: derived from option strings)
|
---|
1140 |
|
---|
1141 | Stand-in for the option argument(s) to use when printing help text.
|
---|
1142 | See section~\ref{optparse-tutorial}, the tutorial for an example.
|
---|
1143 |
|
---|
1144 | \end{itemize}
|
---|
1145 |
|
---|
1146 |
|
---|
1147 | \subsubsection{Standard option types\label{optparse-standard-option-types}}
|
---|
1148 |
|
---|
1149 | \module{optparse} has six built-in option types: \code{string}, \code{int}, \code{long},
|
---|
1150 | \code{choice}, \code{float} and \code{complex}. If you need to add new option
|
---|
1151 | types, see section~\ref{optparse-extending-optparse}, Extending \module{optparse}.
|
---|
1152 |
|
---|
1153 | Arguments to string options are not checked or converted in any way: the
|
---|
1154 | text on the command line is stored in the destination (or passed to the
|
---|
1155 | callback) as-is.
|
---|
1156 |
|
---|
1157 | Integer arguments (type \code{int} or \code{long}) are parsed as follows:
|
---|
1158 | \begin{quote}
|
---|
1159 | \begin{itemize}
|
---|
1160 | \item {}
|
---|
1161 | if the number starts with \code{0x}, it is parsed as a hexadecimal number
|
---|
1162 |
|
---|
1163 | \item {}
|
---|
1164 | if the number starts with \code{0}, it is parsed as an octal number
|
---|
1165 |
|
---|
1166 | \item {}
|
---|
1167 | if the number starts with \code{0b}, is is parsed as a binary number
|
---|
1168 |
|
---|
1169 | \item {}
|
---|
1170 | otherwise, the number is parsed as a decimal number
|
---|
1171 |
|
---|
1172 | \end{itemize}
|
---|
1173 | \end{quote}
|
---|
1174 |
|
---|
1175 | The conversion is done by calling either \code{int()} or \code{long()} with
|
---|
1176 | the appropriate base (2, 8, 10, or 16). If this fails, so will \module{optparse},
|
---|
1177 | although with a more useful error message.
|
---|
1178 |
|
---|
1179 | \code{float} and \code{complex} option arguments are converted directly with
|
---|
1180 | \code{float()} and \code{complex()}, with similar error-handling.
|
---|
1181 |
|
---|
1182 | \code{choice} options are a subtype of \code{string} options. The \code{choices}
|
---|
1183 | option attribute (a sequence of strings) defines the set of allowed
|
---|
1184 | option arguments. \code{optparse.check{\_}choice()} compares
|
---|
1185 | user-supplied option arguments against this master list and raises
|
---|
1186 | OptionValueError if an invalid string is given.
|
---|
1187 |
|
---|
1188 |
|
---|
1189 | \subsubsection{Parsing arguments\label{optparse-parsing-arguments}}
|
---|
1190 |
|
---|
1191 | The whole point of creating and populating an OptionParser is to call
|
---|
1192 | its \method{parse{\_}args()} method:
|
---|
1193 | \begin{verbatim}
|
---|
1194 | (options, args) = parser.parse_args(args=None, options=None)
|
---|
1195 | \end{verbatim}
|
---|
1196 |
|
---|
1197 | where the input parameters are
|
---|
1198 | \begin{description}
|
---|
1199 | \item[\code{args}]
|
---|
1200 | the list of arguments to process (default: \code{sys.argv{[}1:]})
|
---|
1201 | \item[\code{options}]
|
---|
1202 | object to store option arguments in (default: a new instance of
|
---|
1203 | optparse.Values)
|
---|
1204 | \end{description}
|
---|
1205 |
|
---|
1206 | and the return values are
|
---|
1207 | \begin{description}
|
---|
1208 | \item[\code{options}]
|
---|
1209 | the same object that was passed in as \code{options}, or the
|
---|
1210 | optparse.Values instance created by \module{optparse}
|
---|
1211 | \item[\code{args}]
|
---|
1212 | the leftover positional arguments after all options have been
|
---|
1213 | processed
|
---|
1214 | \end{description}
|
---|
1215 |
|
---|
1216 | The most common usage is to supply neither keyword argument. If you
|
---|
1217 | supply \code{options}, it will be modified with repeated \code{setattr()}
|
---|
1218 | calls (roughly one for every option argument stored to an option
|
---|
1219 | destination) and returned by \method{parse{\_}args()}.
|
---|
1220 |
|
---|
1221 | If \method{parse{\_}args()} encounters any errors in the argument list, it calls
|
---|
1222 | the OptionParser's \method{error()} method with an appropriate end-user error
|
---|
1223 | message. This ultimately terminates your process with an exit status of
|
---|
1224 | 2 (the traditional \UNIX{} exit status for command-line errors).
|
---|
1225 |
|
---|
1226 |
|
---|
1227 | \subsubsection{Querying and manipulating your option parser\label{optparse-querying-manipulating-option-parser}}
|
---|
1228 |
|
---|
1229 | Sometimes, it's useful to poke around your option parser and see what's
|
---|
1230 | there. OptionParser provides a couple of methods to help you out:
|
---|
1231 | \begin{description}
|
---|
1232 | \item[\code{has{\_}option(opt{\_}str)}]
|
---|
1233 | Return true if the OptionParser has an option with
|
---|
1234 | option string \code{opt{\_}str} (e.g., \code{"-q"} or \code{"-{}-verbose"}).
|
---|
1235 | \item[\code{get{\_}option(opt{\_}str)}]
|
---|
1236 | Returns the Option instance with the option string \code{opt{\_}str}, or
|
---|
1237 | \code{None} if no options have that option string.
|
---|
1238 | \item[\code{remove{\_}option(opt{\_}str)}]
|
---|
1239 | If the OptionParser has an option corresponding to \code{opt{\_}str},
|
---|
1240 | that option is removed. If that option provided any other
|
---|
1241 | option strings, all of those option strings become invalid.
|
---|
1242 | If \code{opt{\_}str} does not occur in any option belonging to this
|
---|
1243 | OptionParser, raises ValueError.
|
---|
1244 | \end{description}
|
---|
1245 |
|
---|
1246 |
|
---|
1247 | \subsubsection{Conflicts between options\label{optparse-conflicts-between-options}}
|
---|
1248 |
|
---|
1249 | If you're not careful, it's easy to define options with conflicting
|
---|
1250 | option strings:
|
---|
1251 | \begin{verbatim}
|
---|
1252 | parser.add_option("-n", "--dry-run", ...)
|
---|
1253 | [...]
|
---|
1254 | parser.add_option("-n", "--noisy", ...)
|
---|
1255 | \end{verbatim}
|
---|
1256 |
|
---|
1257 | (This is particularly true if you've defined your own OptionParser
|
---|
1258 | subclass with some standard options.)
|
---|
1259 |
|
---|
1260 | Every time you add an option, \module{optparse} checks for conflicts with existing
|
---|
1261 | options. If it finds any, it invokes the current conflict-handling
|
---|
1262 | mechanism. You can set the conflict-handling mechanism either in the
|
---|
1263 | constructor:
|
---|
1264 | \begin{verbatim}
|
---|
1265 | parser = OptionParser(..., conflict_handler=handler)
|
---|
1266 | \end{verbatim}
|
---|
1267 |
|
---|
1268 | or with a separate call:
|
---|
1269 | \begin{verbatim}
|
---|
1270 | parser.set_conflict_handler(handler)
|
---|
1271 | \end{verbatim}
|
---|
1272 |
|
---|
1273 | The available conflict handlers are:
|
---|
1274 | \begin{quote}
|
---|
1275 | \begin{description}
|
---|
1276 | \item[\code{error} (default)]
|
---|
1277 | assume option conflicts are a programming error and raise
|
---|
1278 | OptionConflictError
|
---|
1279 | \item[\code{resolve}]
|
---|
1280 | resolve option conflicts intelligently (see below)
|
---|
1281 | \end{description}
|
---|
1282 | \end{quote}
|
---|
1283 |
|
---|
1284 | As an example, let's define an OptionParser that resolves conflicts
|
---|
1285 | intelligently and add conflicting options to it:
|
---|
1286 | \begin{verbatim}
|
---|
1287 | parser = OptionParser(conflict_handler="resolve")
|
---|
1288 | parser.add_option("-n", "--dry-run", ..., help="do no harm")
|
---|
1289 | parser.add_option("-n", "--noisy", ..., help="be noisy")
|
---|
1290 | \end{verbatim}
|
---|
1291 |
|
---|
1292 | At this point, \module{optparse} detects that a previously-added option is already
|
---|
1293 | using the \code{"-n"} option string. Since \code{conflict{\_}handler} is
|
---|
1294 | \code{"resolve"}, it resolves the situation by removing \code{"-n"} from the
|
---|
1295 | earlier option's list of option strings. Now \code{"-{}-dry-run"} is the
|
---|
1296 | only way for the user to activate that option. If the user asks for
|
---|
1297 | help, the help message will reflect that:
|
---|
1298 | \begin{verbatim}
|
---|
1299 | options:
|
---|
1300 | --dry-run do no harm
|
---|
1301 | [...]
|
---|
1302 | -n, --noisy be noisy
|
---|
1303 | \end{verbatim}
|
---|
1304 |
|
---|
1305 | It's possible to whittle away the option strings for a previously-added
|
---|
1306 | option until there are none left, and the user has no way of invoking
|
---|
1307 | that option from the command-line. In that case, \module{optparse} removes that
|
---|
1308 | option completely, so it doesn't show up in help text or anywhere else.
|
---|
1309 | Carrying on with our existing OptionParser:
|
---|
1310 | \begin{verbatim}
|
---|
1311 | parser.add_option("--dry-run", ..., help="new dry-run option")
|
---|
1312 | \end{verbatim}
|
---|
1313 |
|
---|
1314 | At this point, the original \programopt{-n/-{}-dry-run} option is no longer
|
---|
1315 | accessible, so \module{optparse} removes it, leaving this help text:
|
---|
1316 | \begin{verbatim}
|
---|
1317 | options:
|
---|
1318 | [...]
|
---|
1319 | -n, --noisy be noisy
|
---|
1320 | --dry-run new dry-run option
|
---|
1321 | \end{verbatim}
|
---|
1322 |
|
---|
1323 |
|
---|
1324 | \subsubsection{Cleanup\label{optparse-cleanup}}
|
---|
1325 |
|
---|
1326 | OptionParser instances have several cyclic references. This should not
|
---|
1327 | be a problem for Python's garbage collector, but you may wish to break
|
---|
1328 | the cyclic references explicitly by calling \code{destroy()} on your
|
---|
1329 | OptionParser once you are done with it. This is particularly useful in
|
---|
1330 | long-running applications where large object graphs are reachable from
|
---|
1331 | your OptionParser.
|
---|
1332 |
|
---|
1333 |
|
---|
1334 | \subsubsection{Other methods\label{optparse-other-methods}}
|
---|
1335 |
|
---|
1336 | OptionParser supports several other public methods:
|
---|
1337 | \begin{itemize}
|
---|
1338 | \item {}
|
---|
1339 | \code{set{\_}usage(usage)}
|
---|
1340 |
|
---|
1341 | Set the usage string according to the rules described above for the
|
---|
1342 | \code{usage} constructor keyword argument. Passing \code{None} sets the
|
---|
1343 | default usage string; use \code{SUPPRESS{\_}USAGE} to suppress a usage
|
---|
1344 | message.
|
---|
1345 |
|
---|
1346 | \item {}
|
---|
1347 | \code{enable{\_}interspersed{\_}args()}, \code{disable{\_}interspersed{\_}args()}
|
---|
1348 |
|
---|
1349 | Enable/disable positional arguments interspersed with options, similar
|
---|
1350 | to GNU getopt (enabled by default). For example, if \code{"-a"} and
|
---|
1351 | \code{"-b"} are both simple options that take no arguments, \module{optparse}
|
---|
1352 | normally accepts this syntax:
|
---|
1353 | \begin{verbatim}
|
---|
1354 | prog -a arg1 -b arg2
|
---|
1355 | \end{verbatim}
|
---|
1356 |
|
---|
1357 | and treats it as equivalent to
|
---|
1358 | \begin{verbatim}
|
---|
1359 | prog -a -b arg1 arg2
|
---|
1360 | \end{verbatim}
|
---|
1361 |
|
---|
1362 | To disable this feature, call \code{disable{\_}interspersed{\_}args()}. This
|
---|
1363 | restores traditional \UNIX{} syntax, where option parsing stops with the
|
---|
1364 | first non-option argument.
|
---|
1365 |
|
---|
1366 | \item {}
|
---|
1367 | \code{set{\_}defaults(dest=value, ...)}
|
---|
1368 |
|
---|
1369 | Set default values for several option destinations at once. Using
|
---|
1370 | \method{set{\_}defaults()} is the preferred way to set default values for
|
---|
1371 | options, since multiple options can share the same destination. For
|
---|
1372 | example, if several ``mode'' options all set the same destination, any
|
---|
1373 | one of them can set the default, and the last one wins:
|
---|
1374 | \begin{verbatim}
|
---|
1375 | parser.add_option("--advanced", action="store_const",
|
---|
1376 | dest="mode", const="advanced",
|
---|
1377 | default="novice") # overridden below
|
---|
1378 | parser.add_option("--novice", action="store_const",
|
---|
1379 | dest="mode", const="novice",
|
---|
1380 | default="advanced") # overrides above setting
|
---|
1381 | \end{verbatim}
|
---|
1382 |
|
---|
1383 | To avoid this confusion, use \method{set{\_}defaults()}:
|
---|
1384 | \begin{verbatim}
|
---|
1385 | parser.set_defaults(mode="advanced")
|
---|
1386 | parser.add_option("--advanced", action="store_const",
|
---|
1387 | dest="mode", const="advanced")
|
---|
1388 | parser.add_option("--novice", action="store_const",
|
---|
1389 | dest="mode", const="novice")
|
---|
1390 | \end{verbatim}
|
---|
1391 |
|
---|
1392 | \end{itemize}
|
---|
1393 | % $Id: reference.txt 519 2006-06-11 14:39:11Z gward $
|
---|
1394 |
|
---|
1395 |
|
---|
1396 | \subsection{Option Callbacks\label{optparse-option-callbacks}}
|
---|
1397 |
|
---|
1398 | When \module{optparse}'s built-in actions and types aren't quite enough for your
|
---|
1399 | needs, you have two choices: extend \module{optparse} or define a callback option.
|
---|
1400 | Extending \module{optparse} is more general, but overkill for a lot of simple
|
---|
1401 | cases. Quite often a simple callback is all you need.
|
---|
1402 |
|
---|
1403 | There are two steps to defining a callback option:
|
---|
1404 | \begin{itemize}
|
---|
1405 | \item {}
|
---|
1406 | define the option itself using the \code{callback} action
|
---|
1407 |
|
---|
1408 | \item {}
|
---|
1409 | write the callback; this is a function (or method) that
|
---|
1410 | takes at least four arguments, as described below
|
---|
1411 |
|
---|
1412 | \end{itemize}
|
---|
1413 |
|
---|
1414 |
|
---|
1415 | \subsubsection{Defining a callback option\label{optparse-defining-callback-option}}
|
---|
1416 |
|
---|
1417 | As always, the easiest way to define a callback option is by using the
|
---|
1418 | \code{parser.add{\_}option()} method. Apart from \member{action}, the only option
|
---|
1419 | attribute you must specify is \code{callback}, the function to call:
|
---|
1420 | \begin{verbatim}
|
---|
1421 | parser.add_option("-c", action="callback", callback=my_callback)
|
---|
1422 | \end{verbatim}
|
---|
1423 |
|
---|
1424 | \code{callback} is a function (or other callable object), so you must have
|
---|
1425 | already defined \code{my{\_}callback()} when you create this callback option.
|
---|
1426 | In this simple case, \module{optparse} doesn't even know if \programopt{-c} takes any
|
---|
1427 | arguments, which usually means that the option takes no arguments{---}the
|
---|
1428 | mere presence of \programopt{-c} on the command-line is all it needs to know. In
|
---|
1429 | some circumstances, though, you might want your callback to consume an
|
---|
1430 | arbitrary number of command-line arguments. This is where writing
|
---|
1431 | callbacks gets tricky; it's covered later in this section.
|
---|
1432 |
|
---|
1433 | \module{optparse} always passes four particular arguments to your callback, and it
|
---|
1434 | will only pass additional arguments if you specify them via
|
---|
1435 | \code{callback{\_}args} and \code{callback{\_}kwargs}. Thus, the minimal callback
|
---|
1436 | function signature is:
|
---|
1437 | \begin{verbatim}
|
---|
1438 | def my_callback(option, opt, value, parser):
|
---|
1439 | \end{verbatim}
|
---|
1440 |
|
---|
1441 | The four arguments to a callback are described below.
|
---|
1442 |
|
---|
1443 | There are several other option attributes that you can supply when you
|
---|
1444 | define a callback option:
|
---|
1445 | \begin{description}
|
---|
1446 | \item[\member{type}]
|
---|
1447 | has its usual meaning: as with the \code{store} or \code{append} actions,
|
---|
1448 | it instructs \module{optparse} to consume one argument and convert it to
|
---|
1449 | \member{type}. Rather than storing the converted value(s) anywhere,
|
---|
1450 | though, \module{optparse} passes it to your callback function.
|
---|
1451 | \item[\code{nargs}]
|
---|
1452 | also has its usual meaning: if it is supplied and {\textgreater} 1, \module{optparse} will
|
---|
1453 | consume \code{nargs} arguments, each of which must be convertible to
|
---|
1454 | \member{type}. It then passes a tuple of converted values to your
|
---|
1455 | callback.
|
---|
1456 | \item[\code{callback{\_}args}]
|
---|
1457 | a tuple of extra positional arguments to pass to the callback
|
---|
1458 | \item[\code{callback{\_}kwargs}]
|
---|
1459 | a dictionary of extra keyword arguments to pass to the callback
|
---|
1460 | \end{description}
|
---|
1461 |
|
---|
1462 |
|
---|
1463 | \subsubsection{How callbacks are called\label{optparse-how-callbacks-called}}
|
---|
1464 |
|
---|
1465 | All callbacks are called as follows:
|
---|
1466 | \begin{verbatim}
|
---|
1467 | func(option, opt_str, value, parser, *args, **kwargs)
|
---|
1468 | \end{verbatim}
|
---|
1469 |
|
---|
1470 | where
|
---|
1471 | \begin{description}
|
---|
1472 | \item[\code{option}]
|
---|
1473 | is the Option instance that's calling the callback
|
---|
1474 | \item[\code{opt{\_}str}]
|
---|
1475 | is the option string seen on the command-line that's triggering the
|
---|
1476 | callback. (If an abbreviated long option was used, \code{opt{\_}str} will
|
---|
1477 | be the full, canonical option string{---}e.g. if the user puts
|
---|
1478 | \code{"-{}-foo"} on the command-line as an abbreviation for
|
---|
1479 | \code{"-{}-foobar"}, then \code{opt{\_}str} will be \code{"-{}-foobar"}.)
|
---|
1480 | \item[\code{value}]
|
---|
1481 | is the argument to this option seen on the command-line. \module{optparse} will
|
---|
1482 | only expect an argument if \member{type} is set; the type of \code{value}
|
---|
1483 | will be the type implied by the option's type. If \member{type} for this
|
---|
1484 | option is \code{None} (no argument expected), then \code{value} will be
|
---|
1485 | \code{None}. If \code{nargs} {\textgreater} 1, \code{value} will be a tuple of values of
|
---|
1486 | the appropriate type.
|
---|
1487 | \item[\code{parser}]
|
---|
1488 | is the OptionParser instance driving the whole thing, mainly
|
---|
1489 | useful because you can access some other interesting data through
|
---|
1490 | its instance attributes:
|
---|
1491 | \begin{description}
|
---|
1492 | \item[\code{parser.largs}]
|
---|
1493 | the current list of leftover arguments, ie. arguments that have
|
---|
1494 | been consumed but are neither options nor option arguments.
|
---|
1495 | Feel free to modify \code{parser.largs}, e.g. by adding more
|
---|
1496 | arguments to it. (This list will become \code{args}, the second
|
---|
1497 | return value of \method{parse{\_}args()}.)
|
---|
1498 | \item[\code{parser.rargs}]
|
---|
1499 | the current list of remaining arguments, ie. with \code{opt{\_}str} and
|
---|
1500 | \code{value} (if applicable) removed, and only the arguments
|
---|
1501 | following them still there. Feel free to modify
|
---|
1502 | \code{parser.rargs}, e.g. by consuming more arguments.
|
---|
1503 | \item[\code{parser.values}]
|
---|
1504 | the object where option values are by default stored (an
|
---|
1505 | instance of optparse.OptionValues). This lets callbacks use the
|
---|
1506 | same mechanism as the rest of \module{optparse} for storing option values;
|
---|
1507 | you don't need to mess around with globals or closures. You can
|
---|
1508 | also access or modify the value(s) of any options already
|
---|
1509 | encountered on the command-line.
|
---|
1510 | \end{description}
|
---|
1511 | \item[\code{args}]
|
---|
1512 | is a tuple of arbitrary positional arguments supplied via the
|
---|
1513 | \code{callback{\_}args} option attribute.
|
---|
1514 | \item[\code{kwargs}]
|
---|
1515 | is a dictionary of arbitrary keyword arguments supplied via
|
---|
1516 | \code{callback{\_}kwargs}.
|
---|
1517 | \end{description}
|
---|
1518 |
|
---|
1519 |
|
---|
1520 | \subsubsection{Raising errors in a callback\label{optparse-raising-errors-in-callback}}
|
---|
1521 |
|
---|
1522 | The callback function should raise OptionValueError if there are any
|
---|
1523 | problems with the option or its argument(s). \module{optparse} catches this and
|
---|
1524 | terminates the program, printing the error message you supply to
|
---|
1525 | stderr. Your message should be clear, concise, accurate, and mention
|
---|
1526 | the option at fault. Otherwise, the user will have a hard time
|
---|
1527 | figuring out what he did wrong.
|
---|
1528 |
|
---|
1529 |
|
---|
1530 | \subsubsection{Callback example 1: trivial callback\label{optparse-callback-example-1}}
|
---|
1531 |
|
---|
1532 | Here's an example of a callback option that takes no arguments, and
|
---|
1533 | simply records that the option was seen:
|
---|
1534 | \begin{verbatim}
|
---|
1535 | def record_foo_seen(option, opt_str, value, parser):
|
---|
1536 | parser.saw_foo = True
|
---|
1537 |
|
---|
1538 | parser.add_option("--foo", action="callback", callback=record_foo_seen)
|
---|
1539 | \end{verbatim}
|
---|
1540 |
|
---|
1541 | Of course, you could do that with the \code{store{\_}true} action.
|
---|
1542 |
|
---|
1543 |
|
---|
1544 | \subsubsection{Callback example 2: check option order\label{optparse-callback-example-2}}
|
---|
1545 |
|
---|
1546 | Here's a slightly more interesting example: record the fact that
|
---|
1547 | \code{"-a"} is seen, but blow up if it comes after \code{"-b"} in the
|
---|
1548 | command-line.
|
---|
1549 | \begin{verbatim}
|
---|
1550 | def check_order(option, opt_str, value, parser):
|
---|
1551 | if parser.values.b:
|
---|
1552 | raise OptionValueError("can't use -a after -b")
|
---|
1553 | parser.values.a = 1
|
---|
1554 | [...]
|
---|
1555 | parser.add_option("-a", action="callback", callback=check_order)
|
---|
1556 | parser.add_option("-b", action="store_true", dest="b")
|
---|
1557 | \end{verbatim}
|
---|
1558 |
|
---|
1559 |
|
---|
1560 | \subsubsection{Callback example 3: check option order (generalized)\label{optparse-callback-example-3}}
|
---|
1561 |
|
---|
1562 | If you want to re-use this callback for several similar options (set a
|
---|
1563 | flag, but blow up if \code{"-b"} has already been seen), it needs a bit of
|
---|
1564 | work: the error message and the flag that it sets must be
|
---|
1565 | generalized.
|
---|
1566 | \begin{verbatim}
|
---|
1567 | def check_order(option, opt_str, value, parser):
|
---|
1568 | if parser.values.b:
|
---|
1569 | raise OptionValueError("can't use %s after -b" % opt_str)
|
---|
1570 | setattr(parser.values, option.dest, 1)
|
---|
1571 | [...]
|
---|
1572 | parser.add_option("-a", action="callback", callback=check_order, dest='a')
|
---|
1573 | parser.add_option("-b", action="store_true", dest="b")
|
---|
1574 | parser.add_option("-c", action="callback", callback=check_order, dest='c')
|
---|
1575 | \end{verbatim}
|
---|
1576 |
|
---|
1577 |
|
---|
1578 | \subsubsection{Callback example 4: check arbitrary condition\label{optparse-callback-example-4}}
|
---|
1579 |
|
---|
1580 | Of course, you could put any condition in there{---}you're not limited
|
---|
1581 | to checking the values of already-defined options. For example, if
|
---|
1582 | you have options that should not be called when the moon is full, all
|
---|
1583 | you have to do is this:
|
---|
1584 | \begin{verbatim}
|
---|
1585 | def check_moon(option, opt_str, value, parser):
|
---|
1586 | if is_moon_full():
|
---|
1587 | raise OptionValueError("%s option invalid when moon is full"
|
---|
1588 | % opt_str)
|
---|
1589 | setattr(parser.values, option.dest, 1)
|
---|
1590 | [...]
|
---|
1591 | parser.add_option("--foo",
|
---|
1592 | action="callback", callback=check_moon, dest="foo")
|
---|
1593 | \end{verbatim}
|
---|
1594 |
|
---|
1595 | (The definition of \code{is{\_}moon{\_}full()} is left as an exercise for the
|
---|
1596 | reader.)
|
---|
1597 |
|
---|
1598 |
|
---|
1599 | \subsubsection{Callback example 5: fixed arguments\label{optparse-callback-example-5}}
|
---|
1600 |
|
---|
1601 | Things get slightly more interesting when you define callback options
|
---|
1602 | that take a fixed number of arguments. Specifying that a callback
|
---|
1603 | option takes arguments is similar to defining a \code{store} or \code{append}
|
---|
1604 | option: if you define \member{type}, then the option takes one argument that
|
---|
1605 | must be convertible to that type; if you further define \code{nargs}, then
|
---|
1606 | the option takes \code{nargs} arguments.
|
---|
1607 |
|
---|
1608 | Here's an example that just emulates the standard \code{store} action:
|
---|
1609 | \begin{verbatim}
|
---|
1610 | def store_value(option, opt_str, value, parser):
|
---|
1611 | setattr(parser.values, option.dest, value)
|
---|
1612 | [...]
|
---|
1613 | parser.add_option("--foo",
|
---|
1614 | action="callback", callback=store_value,
|
---|
1615 | type="int", nargs=3, dest="foo")
|
---|
1616 | \end{verbatim}
|
---|
1617 |
|
---|
1618 | Note that \module{optparse} takes care of consuming 3 arguments and converting them
|
---|
1619 | to integers for you; all you have to do is store them. (Or whatever;
|
---|
1620 | obviously you don't need a callback for this example.)
|
---|
1621 |
|
---|
1622 |
|
---|
1623 | \subsubsection{Callback example 6: variable arguments\label{optparse-callback-example-6}}
|
---|
1624 |
|
---|
1625 | Things get hairy when you want an option to take a variable number of
|
---|
1626 | arguments. For this case, you must write a callback, as \module{optparse} doesn't
|
---|
1627 | provide any built-in capabilities for it. And you have to deal with
|
---|
1628 | certain intricacies of conventional \UNIX{} command-line parsing that \module{optparse}
|
---|
1629 | normally handles for you. In particular, callbacks should implement
|
---|
1630 | the conventional rules for bare \code{"-{}-"} and \code{"-"} arguments:
|
---|
1631 | \begin{itemize}
|
---|
1632 | \item {}
|
---|
1633 | either \code{"-{}-"} or \code{"-"} can be option arguments
|
---|
1634 |
|
---|
1635 | \item {}
|
---|
1636 | bare \code{"-{}-"} (if not the argument to some option): halt command-line
|
---|
1637 | processing and discard the \code{"-{}-"}
|
---|
1638 |
|
---|
1639 | \item {}
|
---|
1640 | bare \code{"-"} (if not the argument to some option): halt command-line
|
---|
1641 | processing but keep the \code{"-"} (append it to \code{parser.largs})
|
---|
1642 |
|
---|
1643 | \end{itemize}
|
---|
1644 |
|
---|
1645 | If you want an option that takes a variable number of arguments, there
|
---|
1646 | are several subtle, tricky issues to worry about. The exact
|
---|
1647 | implementation you choose will be based on which trade-offs you're
|
---|
1648 | willing to make for your application (which is why \module{optparse} doesn't support
|
---|
1649 | this sort of thing directly).
|
---|
1650 |
|
---|
1651 | Nevertheless, here's a stab at a callback for an option with variable
|
---|
1652 | arguments:
|
---|
1653 | \begin{verbatim}
|
---|
1654 | def vararg_callback(option, opt_str, value, parser):
|
---|
1655 | assert value is None
|
---|
1656 | done = 0
|
---|
1657 | value = []
|
---|
1658 | rargs = parser.rargs
|
---|
1659 | while rargs:
|
---|
1660 | arg = rargs[0]
|
---|
1661 |
|
---|
1662 | # Stop if we hit an arg like "--foo", "-a", "-fx", "--file=f",
|
---|
1663 | # etc. Note that this also stops on "-3" or "-3.0", so if
|
---|
1664 | # your option takes numeric values, you will need to handle
|
---|
1665 | # this.
|
---|
1666 | if ((arg[:2] == "--" and len(arg) > 2) or
|
---|
1667 | (arg[:1] == "-" and len(arg) > 1 and arg[1] != "-")):
|
---|
1668 | break
|
---|
1669 | else:
|
---|
1670 | value.append(arg)
|
---|
1671 | del rargs[0]
|
---|
1672 |
|
---|
1673 | setattr(parser.values, option.dest, value)
|
---|
1674 |
|
---|
1675 | [...]
|
---|
1676 | parser.add_option("-c", "--callback",
|
---|
1677 | action="callback", callback=varargs)
|
---|
1678 | \end{verbatim}
|
---|
1679 |
|
---|
1680 | The main weakness with this particular implementation is that negative
|
---|
1681 | numbers in the arguments following \code{"-c"} will be interpreted as
|
---|
1682 | further options (probably causing an error), rather than as arguments to
|
---|
1683 | \code{"-c"}. Fixing this is left as an exercise for the reader.
|
---|
1684 | % $Id: callbacks.txt 415 2004-09-30 02:26:17Z greg $
|
---|
1685 |
|
---|
1686 |
|
---|
1687 | \subsection{Extending \module{optparse}\label{optparse-extending-optparse}}
|
---|
1688 |
|
---|
1689 | Since the two major controlling factors in how \module{optparse} interprets
|
---|
1690 | command-line options are the action and type of each option, the most
|
---|
1691 | likely direction of extension is to add new actions and new types.
|
---|
1692 |
|
---|
1693 |
|
---|
1694 | \subsubsection{Adding new types\label{optparse-adding-new-types}}
|
---|
1695 |
|
---|
1696 | To add new types, you need to define your own subclass of \module{optparse}'s Option
|
---|
1697 | class. This class has a couple of attributes that define \module{optparse}'s types:
|
---|
1698 | \member{TYPES} and \member{TYPE{\_}CHECKER}.
|
---|
1699 |
|
---|
1700 | \member{TYPES} is a tuple of type names; in your subclass, simply define a new
|
---|
1701 | tuple \member{TYPES} that builds on the standard one.
|
---|
1702 |
|
---|
1703 | \member{TYPE{\_}CHECKER} is a dictionary mapping type names to type-checking
|
---|
1704 | functions. A type-checking function has the following signature:
|
---|
1705 | \begin{verbatim}
|
---|
1706 | def check_mytype(option, opt, value)
|
---|
1707 | \end{verbatim}
|
---|
1708 |
|
---|
1709 | where \code{option} is an \class{Option} instance, \code{opt} is an option string
|
---|
1710 | (e.g., \code{"-f"}), and \code{value} is the string from the command line that
|
---|
1711 | must be checked and converted to your desired type. \code{check{\_}mytype()}
|
---|
1712 | should return an object of the hypothetical type \code{mytype}. The value
|
---|
1713 | returned by a type-checking function will wind up in the OptionValues
|
---|
1714 | instance returned by \method{OptionParser.parse{\_}args()}, or be passed to a
|
---|
1715 | callback as the \code{value} parameter.
|
---|
1716 |
|
---|
1717 | Your type-checking function should raise OptionValueError if it
|
---|
1718 | encounters any problems. OptionValueError takes a single string
|
---|
1719 | argument, which is passed as-is to OptionParser's \method{error()} method,
|
---|
1720 | which in turn prepends the program name and the string \code{"error:"} and
|
---|
1721 | prints everything to stderr before terminating the process.
|
---|
1722 |
|
---|
1723 | Here's a silly example that demonstrates adding a \code{complex} option
|
---|
1724 | type to parse Python-style complex numbers on the command line. (This
|
---|
1725 | is even sillier than it used to be, because \module{optparse} 1.3 added built-in
|
---|
1726 | support for complex numbers, but never mind.)
|
---|
1727 |
|
---|
1728 | First, the necessary imports:
|
---|
1729 | \begin{verbatim}
|
---|
1730 | from copy import copy
|
---|
1731 | from optparse import Option, OptionValueError
|
---|
1732 | \end{verbatim}
|
---|
1733 |
|
---|
1734 | You need to define your type-checker first, since it's referred to later
|
---|
1735 | (in the \member{TYPE{\_}CHECKER} class attribute of your Option subclass):
|
---|
1736 | \begin{verbatim}
|
---|
1737 | def check_complex(option, opt, value):
|
---|
1738 | try:
|
---|
1739 | return complex(value)
|
---|
1740 | except ValueError:
|
---|
1741 | raise OptionValueError(
|
---|
1742 | "option %s: invalid complex value: %r" % (opt, value))
|
---|
1743 | \end{verbatim}
|
---|
1744 |
|
---|
1745 | Finally, the Option subclass:
|
---|
1746 | \begin{verbatim}
|
---|
1747 | class MyOption (Option):
|
---|
1748 | TYPES = Option.TYPES + ("complex",)
|
---|
1749 | TYPE_CHECKER = copy(Option.TYPE_CHECKER)
|
---|
1750 | TYPE_CHECKER["complex"] = check_complex
|
---|
1751 | \end{verbatim}
|
---|
1752 |
|
---|
1753 | (If we didn't make a \function{copy()} of \member{Option.TYPE{\_}CHECKER}, we would end
|
---|
1754 | up modifying the \member{TYPE{\_}CHECKER} attribute of \module{optparse}'s Option class.
|
---|
1755 | This being Python, nothing stops you from doing that except good manners
|
---|
1756 | and common sense.)
|
---|
1757 |
|
---|
1758 | That's it! Now you can write a script that uses the new option type
|
---|
1759 | just like any other \module{optparse}-based script, except you have to instruct your
|
---|
1760 | OptionParser to use MyOption instead of Option:
|
---|
1761 | \begin{verbatim}
|
---|
1762 | parser = OptionParser(option_class=MyOption)
|
---|
1763 | parser.add_option("-c", type="complex")
|
---|
1764 | \end{verbatim}
|
---|
1765 |
|
---|
1766 | Alternately, you can build your own option list and pass it to
|
---|
1767 | OptionParser; if you don't use \method{add{\_}option()} in the above way, you
|
---|
1768 | don't need to tell OptionParser which option class to use:
|
---|
1769 | \begin{verbatim}
|
---|
1770 | option_list = [MyOption("-c", action="store", type="complex", dest="c")]
|
---|
1771 | parser = OptionParser(option_list=option_list)
|
---|
1772 | \end{verbatim}
|
---|
1773 |
|
---|
1774 |
|
---|
1775 | \subsubsection{Adding new actions\label{optparse-adding-new-actions}}
|
---|
1776 |
|
---|
1777 | Adding new actions is a bit trickier, because you have to understand
|
---|
1778 | that \module{optparse} has a couple of classifications for actions:
|
---|
1779 | \begin{description}
|
---|
1780 | \item[``store'' actions]
|
---|
1781 | actions that result in \module{optparse} storing a value to an attribute of the
|
---|
1782 | current OptionValues instance; these options require a \member{dest}
|
---|
1783 | attribute to be supplied to the Option constructor
|
---|
1784 | \item[``typed'' actions]
|
---|
1785 | actions that take a value from the command line and expect it to be
|
---|
1786 | of a certain type; or rather, a string that can be converted to a
|
---|
1787 | certain type. These options require a \member{type} attribute to the
|
---|
1788 | Option constructor.
|
---|
1789 | \end{description}
|
---|
1790 |
|
---|
1791 | These are overlapping sets: some default ``store'' actions are \code{store},
|
---|
1792 | \code{store{\_}const}, \code{append}, and \code{count}, while the default ``typed''
|
---|
1793 | actions are \code{store}, \code{append}, and \code{callback}.
|
---|
1794 |
|
---|
1795 | When you add an action, you need to categorize it by listing it in at
|
---|
1796 | least one of the following class attributes of Option (all are lists of
|
---|
1797 | strings):
|
---|
1798 | \begin{description}
|
---|
1799 | \item[\member{ACTIONS}]
|
---|
1800 | all actions must be listed in ACTIONS
|
---|
1801 | \item[\member{STORE{\_}ACTIONS}]
|
---|
1802 | ``store'' actions are additionally listed here
|
---|
1803 | \item[\member{TYPED{\_}ACTIONS}]
|
---|
1804 | ``typed'' actions are additionally listed here
|
---|
1805 | \item[\code{ALWAYS{\_}TYPED{\_}ACTIONS}]
|
---|
1806 | actions that always take a type (i.e. whose options always take a
|
---|
1807 | value) are additionally listed here. The only effect of this is
|
---|
1808 | that \module{optparse} assigns the default type, \code{string}, to options with no
|
---|
1809 | explicit type whose action is listed in \code{ALWAYS{\_}TYPED{\_}ACTIONS}.
|
---|
1810 | \end{description}
|
---|
1811 |
|
---|
1812 | In order to actually implement your new action, you must override
|
---|
1813 | Option's \method{take{\_}action()} method and add a case that recognizes your
|
---|
1814 | action.
|
---|
1815 |
|
---|
1816 | For example, let's add an \code{extend} action. This is similar to the
|
---|
1817 | standard \code{append} action, but instead of taking a single value from
|
---|
1818 | the command-line and appending it to an existing list, \code{extend} will
|
---|
1819 | take multiple values in a single comma-delimited string, and extend an
|
---|
1820 | existing list with them. That is, if \code{"-{}-names"} is an \code{extend}
|
---|
1821 | option of type \code{string}, the command line
|
---|
1822 | \begin{verbatim}
|
---|
1823 | --names=foo,bar --names blah --names ding,dong
|
---|
1824 | \end{verbatim}
|
---|
1825 |
|
---|
1826 | would result in a list
|
---|
1827 | \begin{verbatim}
|
---|
1828 | ["foo", "bar", "blah", "ding", "dong"]
|
---|
1829 | \end{verbatim}
|
---|
1830 |
|
---|
1831 | Again we define a subclass of Option:
|
---|
1832 | \begin{verbatim}
|
---|
1833 | class MyOption (Option):
|
---|
1834 |
|
---|
1835 | ACTIONS = Option.ACTIONS + ("extend",)
|
---|
1836 | STORE_ACTIONS = Option.STORE_ACTIONS + ("extend",)
|
---|
1837 | TYPED_ACTIONS = Option.TYPED_ACTIONS + ("extend",)
|
---|
1838 | ALWAYS_TYPED_ACTIONS = Option.ALWAYS_TYPED_ACTIONS + ("extend",)
|
---|
1839 |
|
---|
1840 | def take_action(self, action, dest, opt, value, values, parser):
|
---|
1841 | if action == "extend":
|
---|
1842 | lvalue = value.split(",")
|
---|
1843 | values.ensure_value(dest, []).extend(lvalue)
|
---|
1844 | else:
|
---|
1845 | Option.take_action(
|
---|
1846 | self, action, dest, opt, value, values, parser)
|
---|
1847 | \end{verbatim}
|
---|
1848 |
|
---|
1849 | Features of note:
|
---|
1850 | \begin{itemize}
|
---|
1851 | \item {}
|
---|
1852 | \code{extend} both expects a value on the command-line and stores that
|
---|
1853 | value somewhere, so it goes in both \member{STORE{\_}ACTIONS} and
|
---|
1854 | \member{TYPED{\_}ACTIONS}
|
---|
1855 |
|
---|
1856 | \item {}
|
---|
1857 | to ensure that \module{optparse} assigns the default type of \code{string} to
|
---|
1858 | \code{extend} actions, we put the \code{extend} action in
|
---|
1859 | \code{ALWAYS{\_}TYPED{\_}ACTIONS} as well
|
---|
1860 |
|
---|
1861 | \item {}
|
---|
1862 | \method{MyOption.take{\_}action()} implements just this one new action, and
|
---|
1863 | passes control back to \method{Option.take{\_}action()} for the standard
|
---|
1864 | \module{optparse} actions
|
---|
1865 |
|
---|
1866 | \item {}
|
---|
1867 | \code{values} is an instance of the optparse{\_}parser.Values class,
|
---|
1868 | which provides the very useful \method{ensure{\_}value()} method.
|
---|
1869 | \method{ensure{\_}value()} is essentially \function{getattr()} with a safety valve;
|
---|
1870 | it is called as
|
---|
1871 | \begin{verbatim}
|
---|
1872 | values.ensure_value(attr, value)
|
---|
1873 | \end{verbatim}
|
---|
1874 |
|
---|
1875 | If the \code{attr} attribute of \code{values} doesn't exist or is None, then
|
---|
1876 | ensure{\_}value() first sets it to \code{value}, and then returns 'value.
|
---|
1877 | This is very handy for actions like \code{extend}, \code{append}, and
|
---|
1878 | \code{count}, all of which accumulate data in a variable and expect that
|
---|
1879 | variable to be of a certain type (a list for the first two, an integer
|
---|
1880 | for the latter). Using \method{ensure{\_}value()} means that scripts using
|
---|
1881 | your action don't have to worry about setting a default value for the
|
---|
1882 | option destinations in question; they can just leave the default as
|
---|
1883 | None and \method{ensure{\_}value()} will take care of getting it right when
|
---|
1884 | it's needed.
|
---|
1885 |
|
---|
1886 | \end{itemize}
|
---|
1887 | % $Id: extending.txt 517 2006-06-10 16:18:11Z gward $
|
---|
1888 |
|
---|