~ubuntu-branches/ubuntu/maverick/python3.1/maverick

« back to all changes in this revision

Viewing changes to Doc/library/optparse.rst

  • Committer: Bazaar Package Importer
  • Author(s): Matthias Klose
  • Date: 2009-03-23 00:01:27 UTC
  • Revision ID: james.westby@ubuntu.com-20090323000127-5fstfxju4ufrhthq
Tags: upstream-3.1~a1+20090322
ImportĀ upstreamĀ versionĀ 3.1~a1+20090322

Show diffs side-by-side

added added

removed removed

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