blob: e40ffff7b02c11698822828e662da078fc890c96 [file] [log] [blame]
Steven Betharde9330e72010-03-02 08:38:09 +00001:mod:`optparse` --- Parser for command line options
2===================================================
Georg Brandl8ec7f652007-08-15 14:28:01 +00003
4.. module:: optparse
Steven Betharde9330e72010-03-02 08:38:09 +00005 :synopsis: Command-line option parsing library.
Georg Brandl8ec7f652007-08-15 14:28:01 +00006.. moduleauthor:: Greg Ward <gward@python.net>
7
8
9.. versionadded:: 2.3
10
11.. sectionauthor:: Greg Ward <gward@python.net>
12
13
Georg Brandlb926ebb2009-09-17 17:14:04 +000014:mod:`optparse` is a more convenient, flexible, and powerful library for parsing
15command-line options than the old :mod:`getopt` module. :mod:`optparse` uses a
16more declarative style of command-line parsing: you create an instance of
17:class:`OptionParser`, populate it with options, and parse the command
18line. :mod:`optparse` allows users to specify options in the conventional
19GNU/POSIX syntax, and additionally generates usage and help messages for you.
Georg Brandl8ec7f652007-08-15 14:28:01 +000020
Georg Brandlb926ebb2009-09-17 17:14:04 +000021Here's an example of using :mod:`optparse` in a simple script::
Georg Brandl8ec7f652007-08-15 14:28:01 +000022
23 from optparse import OptionParser
24 [...]
25 parser = OptionParser()
26 parser.add_option("-f", "--file", dest="filename",
27 help="write report to FILE", metavar="FILE")
28 parser.add_option("-q", "--quiet",
29 action="store_false", dest="verbose", default=True,
30 help="don't print status messages to stdout")
31
32 (options, args) = parser.parse_args()
33
34With these few lines of code, users of your script can now do the "usual thing"
35on the command-line, for example::
36
37 <yourscript> --file=outfile -q
38
Georg Brandlb926ebb2009-09-17 17:14:04 +000039As it parses the command line, :mod:`optparse` sets attributes of the
40``options`` object returned by :meth:`parse_args` based on user-supplied
41command-line values. When :meth:`parse_args` returns from parsing this command
42line, ``options.filename`` will be ``"outfile"`` and ``options.verbose`` will be
43``False``. :mod:`optparse` supports both long and short options, allows short
Georg Brandl8ec7f652007-08-15 14:28:01 +000044options to be merged together, and allows options to be associated with their
45arguments in a variety of ways. Thus, the following command lines are all
46equivalent to the above example::
47
48 <yourscript> -f outfile --quiet
49 <yourscript> --quiet --file outfile
50 <yourscript> -q -foutfile
51 <yourscript> -qfoutfile
52
53Additionally, users can run one of ::
54
55 <yourscript> -h
56 <yourscript> --help
57
Ezio Melotti5129ed32010-01-03 09:01:27 +000058and :mod:`optparse` will print out a brief summary of your script's options:
59
60.. code-block:: text
Georg Brandl8ec7f652007-08-15 14:28:01 +000061
62 usage: <yourscript> [options]
63
64 options:
65 -h, --help show this help message and exit
66 -f FILE, --file=FILE write report to FILE
67 -q, --quiet don't print status messages to stdout
68
69where the value of *yourscript* is determined at runtime (normally from
70``sys.argv[0]``).
71
Georg Brandl8ec7f652007-08-15 14:28:01 +000072
73.. _optparse-background:
74
75Background
76----------
77
78:mod:`optparse` was explicitly designed to encourage the creation of programs
79with straightforward, conventional command-line interfaces. To that end, it
80supports only the most common command-line syntax and semantics conventionally
81used under Unix. If you are unfamiliar with these conventions, read this
82section to acquaint yourself with them.
83
84
85.. _optparse-terminology:
86
87Terminology
88^^^^^^^^^^^
89
90argument
Georg Brandlb926ebb2009-09-17 17:14:04 +000091 a string entered on the command-line, and passed by the shell to ``execl()``
92 or ``execv()``. In Python, arguments are elements of ``sys.argv[1:]``
93 (``sys.argv[0]`` is the name of the program being executed). Unix shells
94 also use the term "word".
Georg Brandl8ec7f652007-08-15 14:28:01 +000095
96 It is occasionally desirable to substitute an argument list other than
97 ``sys.argv[1:]``, so you should read "argument" as "an element of
98 ``sys.argv[1:]``, or of some other list provided as a substitute for
99 ``sys.argv[1:]``".
100
Andrew M. Kuchling810f8072008-09-06 13:04:02 +0000101option
Georg Brandlb926ebb2009-09-17 17:14:04 +0000102 an argument used to supply extra information to guide or customize the
103 execution of a program. There are many different syntaxes for options; the
104 traditional Unix syntax is a hyphen ("-") followed by a single letter,
105 e.g. ``"-x"`` or ``"-F"``. Also, traditional Unix syntax allows multiple
106 options to be merged into a single argument, e.g. ``"-x -F"`` is equivalent
107 to ``"-xF"``. The GNU project introduced ``"--"`` followed by a series of
108 hyphen-separated words, e.g. ``"--file"`` or ``"--dry-run"``. These are the
109 only two option syntaxes provided by :mod:`optparse`.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000110
111 Some other option syntaxes that the world has seen include:
112
113 * a hyphen followed by a few letters, e.g. ``"-pf"`` (this is *not* the same
114 as multiple options merged into a single argument)
115
116 * a hyphen followed by a whole word, e.g. ``"-file"`` (this is technically
117 equivalent to the previous syntax, but they aren't usually seen in the same
118 program)
119
120 * a plus sign followed by a single letter, or a few letters, or a word, e.g.
121 ``"+f"``, ``"+rgb"``
122
123 * a slash followed by a letter, or a few letters, or a word, e.g. ``"/f"``,
124 ``"/file"``
125
Georg Brandlb926ebb2009-09-17 17:14:04 +0000126 These option syntaxes are not supported by :mod:`optparse`, and they never
127 will be. This is deliberate: the first three are non-standard on any
128 environment, and the last only makes sense if you're exclusively targeting
129 VMS, MS-DOS, and/or Windows.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000130
131option argument
Georg Brandlb926ebb2009-09-17 17:14:04 +0000132 an argument that follows an option, is closely associated with that option,
133 and is consumed from the argument list when that option is. With
134 :mod:`optparse`, option arguments may either be in a separate argument from
Ezio Melotti5129ed32010-01-03 09:01:27 +0000135 their option:
136
137 .. code-block:: text
Georg Brandl8ec7f652007-08-15 14:28:01 +0000138
139 -f foo
140 --file foo
141
Ezio Melotti5129ed32010-01-03 09:01:27 +0000142 or included in the same argument:
143
144 .. code-block:: text
Georg Brandl8ec7f652007-08-15 14:28:01 +0000145
146 -ffoo
147 --file=foo
148
Georg Brandlb926ebb2009-09-17 17:14:04 +0000149 Typically, a given option either takes an argument or it doesn't. Lots of
150 people want an "optional option arguments" feature, meaning that some options
151 will take an argument if they see it, and won't if they don't. This is
152 somewhat controversial, because it makes parsing ambiguous: if ``"-a"`` takes
153 an optional argument and ``"-b"`` is another option entirely, how do we
154 interpret ``"-ab"``? Because of this ambiguity, :mod:`optparse` does not
155 support this feature.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000156
157positional argument
158 something leftover in the argument list after options have been parsed, i.e.
Georg Brandlb926ebb2009-09-17 17:14:04 +0000159 after options and their arguments have been parsed and removed from the
160 argument list.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000161
162required option
163 an option that must be supplied on the command-line; note that the phrase
164 "required option" is self-contradictory in English. :mod:`optparse` doesn't
Georg Brandlb926ebb2009-09-17 17:14:04 +0000165 prevent you from implementing required options, but doesn't give you much
Georg Brandl66d8d692009-12-28 08:48:24 +0000166 help at it either.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000167
168For example, consider this hypothetical command-line::
169
170 prog -v --report /tmp/report.txt foo bar
171
172``"-v"`` and ``"--report"`` are both options. Assuming that :option:`--report`
173takes one argument, ``"/tmp/report.txt"`` is an option argument. ``"foo"`` and
174``"bar"`` are positional arguments.
175
176
177.. _optparse-what-options-for:
178
179What are options for?
180^^^^^^^^^^^^^^^^^^^^^
181
182Options are used to provide extra information to tune or customize the execution
183of a program. In case it wasn't clear, options are usually *optional*. A
184program should be able to run just fine with no options whatsoever. (Pick a
185random program from the Unix or GNU toolsets. Can it run without any options at
186all and still make sense? The main exceptions are ``find``, ``tar``, and
187``dd``\ ---all of which are mutant oddballs that have been rightly criticized
188for their non-standard syntax and confusing interfaces.)
189
190Lots of people want their programs to have "required options". Think about it.
191If it's required, then it's *not optional*! If there is a piece of information
192that your program absolutely requires in order to run successfully, that's what
193positional arguments are for.
194
195As an example of good command-line interface design, consider the humble ``cp``
196utility, for copying files. It doesn't make much sense to try to copy files
197without supplying a destination and at least one source. Hence, ``cp`` fails if
198you run it with no arguments. However, it has a flexible, useful syntax that
199does not require any options at all::
200
201 cp SOURCE DEST
202 cp SOURCE ... DEST-DIR
203
204You can get pretty far with just that. Most ``cp`` implementations provide a
205bunch of options to tweak exactly how the files are copied: you can preserve
206mode and modification time, avoid following symlinks, ask before clobbering
207existing files, etc. But none of this distracts from the core mission of
208``cp``, which is to copy either one file to another, or several files to another
209directory.
210
211
212.. _optparse-what-positional-arguments-for:
213
214What are positional arguments for?
215^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
216
217Positional arguments are for those pieces of information that your program
218absolutely, positively requires to run.
219
220A good user interface should have as few absolute requirements as possible. If
221your program requires 17 distinct pieces of information in order to run
222successfully, it doesn't much matter *how* you get that information from the
223user---most people will give up and walk away before they successfully run the
224program. This applies whether the user interface is a command-line, a
225configuration file, or a GUI: if you make that many demands on your users, most
226of them will simply give up.
227
228In short, try to minimize the amount of information that users are absolutely
229required to supply---use sensible defaults whenever possible. Of course, you
230also want to make your programs reasonably flexible. That's what options are
231for. Again, it doesn't matter if they are entries in a config file, widgets in
232the "Preferences" dialog of a GUI, or command-line options---the more options
233you implement, the more flexible your program is, and the more complicated its
234implementation becomes. Too much flexibility has drawbacks as well, of course;
235too many options can overwhelm users and make your code much harder to maintain.
236
Georg Brandl8ec7f652007-08-15 14:28:01 +0000237
238.. _optparse-tutorial:
239
240Tutorial
241--------
242
243While :mod:`optparse` is quite flexible and powerful, it's also straightforward
244to use in most cases. This section covers the code patterns that are common to
245any :mod:`optparse`\ -based program.
246
247First, you need to import the OptionParser class; then, early in the main
248program, create an OptionParser instance::
249
250 from optparse import OptionParser
251 [...]
252 parser = OptionParser()
253
254Then you can start defining options. The basic syntax is::
255
256 parser.add_option(opt_str, ...,
257 attr=value, ...)
258
259Each option has one or more option strings, such as ``"-f"`` or ``"--file"``,
260and several option attributes that tell :mod:`optparse` what to expect and what
261to do when it encounters that option on the command line.
262
263Typically, each option will have one short option string and one long option
264string, e.g.::
265
266 parser.add_option("-f", "--file", ...)
267
268You're free to define as many short option strings and as many long option
269strings as you like (including zero), as long as there is at least one option
270string overall.
271
272The option strings passed to :meth:`add_option` are effectively labels for the
273option defined by that call. For brevity, we will frequently refer to
274*encountering an option* on the command line; in reality, :mod:`optparse`
275encounters *option strings* and looks up options from them.
276
277Once all of your options are defined, instruct :mod:`optparse` to parse your
278program's command line::
279
280 (options, args) = parser.parse_args()
281
282(If you like, you can pass a custom argument list to :meth:`parse_args`, but
283that's rarely necessary: by default it uses ``sys.argv[1:]``.)
284
285:meth:`parse_args` returns two values:
286
287* ``options``, an object containing values for all of your options---e.g. if
288 ``"--file"`` takes a single string argument, then ``options.file`` will be the
289 filename supplied by the user, or ``None`` if the user did not supply that
290 option
291
292* ``args``, the list of positional arguments leftover after parsing options
293
294This tutorial section only covers the four most important option attributes:
Georg Brandlb926ebb2009-09-17 17:14:04 +0000295:attr:`~Option.action`, :attr:`~Option.type`, :attr:`~Option.dest`
296(destination), and :attr:`~Option.help`. Of these, :attr:`~Option.action` is the
297most fundamental.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000298
299
300.. _optparse-understanding-option-actions:
301
302Understanding option actions
303^^^^^^^^^^^^^^^^^^^^^^^^^^^^
304
305Actions tell :mod:`optparse` what to do when it encounters an option on the
306command line. There is a fixed set of actions hard-coded into :mod:`optparse`;
307adding new actions is an advanced topic covered in section
Georg Brandlb926ebb2009-09-17 17:14:04 +0000308:ref:`optparse-extending-optparse`. Most actions tell :mod:`optparse` to store
309a value in some variable---for example, take a string from the command line and
310store it in an attribute of ``options``.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000311
312If you don't specify an option action, :mod:`optparse` defaults to ``store``.
313
314
315.. _optparse-store-action:
316
317The store action
318^^^^^^^^^^^^^^^^
319
320The most common option action is ``store``, which tells :mod:`optparse` to take
321the next argument (or the remainder of the current argument), ensure that it is
322of the correct type, and store it to your chosen destination.
323
324For example::
325
326 parser.add_option("-f", "--file",
327 action="store", type="string", dest="filename")
328
329Now let's make up a fake command line and ask :mod:`optparse` to parse it::
330
331 args = ["-f", "foo.txt"]
332 (options, args) = parser.parse_args(args)
333
334When :mod:`optparse` sees the option string ``"-f"``, it consumes the next
335argument, ``"foo.txt"``, and stores it in ``options.filename``. So, after this
336call to :meth:`parse_args`, ``options.filename`` is ``"foo.txt"``.
337
338Some other option types supported by :mod:`optparse` are ``int`` and ``float``.
339Here's an option that expects an integer argument::
340
341 parser.add_option("-n", type="int", dest="num")
342
343Note that this option has no long option string, which is perfectly acceptable.
344Also, there's no explicit action, since the default is ``store``.
345
346Let's parse another fake command-line. This time, we'll jam the option argument
347right up against the option: since ``"-n42"`` (one argument) is equivalent to
Georg Brandlb926ebb2009-09-17 17:14:04 +0000348``"-n 42"`` (two arguments), the code ::
Georg Brandl8ec7f652007-08-15 14:28:01 +0000349
350 (options, args) = parser.parse_args(["-n42"])
351 print options.num
352
353will print ``"42"``.
354
355If you don't specify a type, :mod:`optparse` assumes ``string``. Combined with
356the fact that the default action is ``store``, that means our first example can
357be a lot shorter::
358
359 parser.add_option("-f", "--file", dest="filename")
360
361If you don't supply a destination, :mod:`optparse` figures out a sensible
362default from the option strings: if the first long option string is
363``"--foo-bar"``, then the default destination is ``foo_bar``. If there are no
364long option strings, :mod:`optparse` looks at the first short option string: the
365default destination for ``"-f"`` is ``f``.
366
367:mod:`optparse` also includes built-in ``long`` and ``complex`` types. Adding
368types is covered in section :ref:`optparse-extending-optparse`.
369
370
371.. _optparse-handling-boolean-options:
372
373Handling boolean (flag) options
374^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
375
376Flag options---set a variable to true or false when a particular option is seen
377---are quite common. :mod:`optparse` supports them with two separate actions,
378``store_true`` and ``store_false``. For example, you might have a ``verbose``
379flag that is turned on with ``"-v"`` and off with ``"-q"``::
380
381 parser.add_option("-v", action="store_true", dest="verbose")
382 parser.add_option("-q", action="store_false", dest="verbose")
383
384Here we have two different options with the same destination, which is perfectly
385OK. (It just means you have to be a bit careful when setting default values---
386see below.)
387
388When :mod:`optparse` encounters ``"-v"`` on the command line, it sets
389``options.verbose`` to ``True``; when it encounters ``"-q"``,
390``options.verbose`` is set to ``False``.
391
392
393.. _optparse-other-actions:
394
395Other actions
396^^^^^^^^^^^^^
397
398Some other actions supported by :mod:`optparse` are:
399
Georg Brandlb926ebb2009-09-17 17:14:04 +0000400``"store_const"``
Georg Brandl8ec7f652007-08-15 14:28:01 +0000401 store a constant value
402
Georg Brandlb926ebb2009-09-17 17:14:04 +0000403``"append"``
Georg Brandl8ec7f652007-08-15 14:28:01 +0000404 append this option's argument to a list
405
Georg Brandlb926ebb2009-09-17 17:14:04 +0000406``"count"``
Georg Brandl8ec7f652007-08-15 14:28:01 +0000407 increment a counter by one
408
Georg Brandlb926ebb2009-09-17 17:14:04 +0000409``"callback"``
Georg Brandl8ec7f652007-08-15 14:28:01 +0000410 call a specified function
411
412These are covered in section :ref:`optparse-reference-guide`, Reference Guide
413and section :ref:`optparse-option-callbacks`.
414
415
416.. _optparse-default-values:
417
418Default values
419^^^^^^^^^^^^^^
420
421All of the above examples involve setting some variable (the "destination") when
422certain command-line options are seen. What happens if those options are never
423seen? Since we didn't supply any defaults, they are all set to ``None``. This
424is usually fine, but sometimes you want more control. :mod:`optparse` lets you
425supply a default value for each destination, which is assigned before the
426command line is parsed.
427
428First, consider the verbose/quiet example. If we want :mod:`optparse` to set
429``verbose`` to ``True`` unless ``"-q"`` is seen, then we can do this::
430
431 parser.add_option("-v", action="store_true", dest="verbose", default=True)
432 parser.add_option("-q", action="store_false", dest="verbose")
433
434Since default values apply to the *destination* rather than to any particular
435option, and these two options happen to have the same destination, this is
436exactly equivalent::
437
438 parser.add_option("-v", action="store_true", dest="verbose")
439 parser.add_option("-q", action="store_false", dest="verbose", default=True)
440
441Consider this::
442
443 parser.add_option("-v", action="store_true", dest="verbose", default=False)
444 parser.add_option("-q", action="store_false", dest="verbose", default=True)
445
446Again, the default value for ``verbose`` will be ``True``: the last default
447value supplied for any particular destination is the one that counts.
448
449A clearer way to specify default values is the :meth:`set_defaults` method of
450OptionParser, which you can call at any time before calling :meth:`parse_args`::
451
452 parser.set_defaults(verbose=True)
453 parser.add_option(...)
454 (options, args) = parser.parse_args()
455
456As before, the last value specified for a given option destination is the one
457that counts. For clarity, try to use one method or the other of setting default
458values, not both.
459
460
461.. _optparse-generating-help:
462
463Generating help
464^^^^^^^^^^^^^^^
465
466:mod:`optparse`'s ability to generate help and usage text automatically is
467useful for creating user-friendly command-line interfaces. All you have to do
Georg Brandlb926ebb2009-09-17 17:14:04 +0000468is supply a :attr:`~Option.help` value for each option, and optionally a short
469usage message for your whole program. Here's an OptionParser populated with
Georg Brandl8ec7f652007-08-15 14:28:01 +0000470user-friendly (documented) options::
471
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",
Andrew M. Kuchling810f8072008-09-06 13:04:02 +0000478 action="store_false", dest="verbose",
Georg Brandl8ec7f652007-08-15 14:28:01 +0000479 help="be vewwy quiet (I'm hunting wabbits)")
480 parser.add_option("-f", "--filename",
Georg Brandld7226ff2009-09-16 13:06:22 +0000481 metavar="FILE", help="write output to FILE")
Georg Brandl8ec7f652007-08-15 14:28:01 +0000482 parser.add_option("-m", "--mode",
483 default="intermediate",
484 help="interaction mode: novice, intermediate, "
485 "or expert [default: %default]")
486
487If :mod:`optparse` encounters either ``"-h"`` or ``"--help"`` on the
488command-line, or if you just call :meth:`parser.print_help`, it prints the
Ezio Melotti5129ed32010-01-03 09:01:27 +0000489following to standard output:
490
491.. code-block:: text
Georg Brandl8ec7f652007-08-15 14:28:01 +0000492
493 usage: <yourscript> [options] arg1 arg2
494
495 options:
496 -h, --help show this help message and exit
497 -v, --verbose make lots of noise [default]
498 -q, --quiet be vewwy quiet (I'm hunting wabbits)
499 -f FILE, --filename=FILE
500 write output to FILE
501 -m MODE, --mode=MODE interaction mode: novice, intermediate, or
502 expert [default: intermediate]
503
504(If the help output is triggered by a help option, :mod:`optparse` exits after
505printing the help text.)
506
507There's a lot going on here to help :mod:`optparse` generate the best possible
508help message:
509
510* the script defines its own usage message::
511
512 usage = "usage: %prog [options] arg1 arg2"
513
514 :mod:`optparse` expands ``"%prog"`` in the usage string to the name of the
Georg Brandlb926ebb2009-09-17 17:14:04 +0000515 current program, i.e. ``os.path.basename(sys.argv[0])``. The expanded string
516 is then printed before the detailed option help.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000517
518 If you don't supply a usage string, :mod:`optparse` uses a bland but sensible
Georg Brandlb926ebb2009-09-17 17:14:04 +0000519 default: ``"usage: %prog [options]"``, which is fine if your script doesn't
520 take any positional arguments.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000521
522* every option defines a help string, and doesn't worry about line-wrapping---
523 :mod:`optparse` takes care of wrapping lines and making the help output look
524 good.
525
526* options that take a value indicate this fact in their automatically-generated
527 help message, e.g. for the "mode" option::
528
529 -m MODE, --mode=MODE
530
531 Here, "MODE" is called the meta-variable: it stands for the argument that the
532 user is expected to supply to :option:`-m`/:option:`--mode`. By default,
533 :mod:`optparse` converts the destination variable name to uppercase and uses
Georg Brandlb926ebb2009-09-17 17:14:04 +0000534 that for the meta-variable. Sometimes, that's not what you want---for
535 example, the :option:`--filename` option explicitly sets ``metavar="FILE"``,
536 resulting in this automatically-generated option description::
Georg Brandl8ec7f652007-08-15 14:28:01 +0000537
538 -f FILE, --filename=FILE
539
Georg Brandlb926ebb2009-09-17 17:14:04 +0000540 This is important for more than just saving space, though: the manually
541 written help text uses the meta-variable "FILE" to clue the user in that
542 there's a connection between the semi-formal syntax "-f FILE" and the informal
543 semantic description "write output to FILE". This is a simple but effective
544 way to make your help text a lot clearer and more useful for end users.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000545
Georg Brandl799b3722008-03-25 08:39:10 +0000546.. versionadded:: 2.4
547 Options that have a default value can include ``%default`` in the help
548 string---\ :mod:`optparse` will replace it with :func:`str` of the option's
549 default value. If an option has no default value (or the default value is
550 ``None``), ``%default`` expands to ``none``.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000551
Georg Brandlb926ebb2009-09-17 17:14:04 +0000552When dealing with many options, it is convenient to group these options for
553better help output. An :class:`OptionParser` can contain several option groups,
554each of which can contain several options.
Andrew M. Kuchling8b506e72008-01-19 21:00:38 +0000555
Georg Brandlb926ebb2009-09-17 17:14:04 +0000556Continuing with the parser defined above, adding an :class:`OptionGroup` to a
557parser is easy::
Andrew M. Kuchling8b506e72008-01-19 21:00:38 +0000558
559 group = OptionGroup(parser, "Dangerous Options",
Georg Brandl7044b112009-01-03 21:04:55 +0000560 "Caution: use these options at your own risk. "
561 "It is believed that some of them bite.")
Andrew M. Kuchling8b506e72008-01-19 21:00:38 +0000562 group.add_option("-g", action="store_true", help="Group option.")
563 parser.add_option_group(group)
564
Ezio Melotti5129ed32010-01-03 09:01:27 +0000565This would result in the following help output:
566
567.. code-block:: text
Andrew M. Kuchling8b506e72008-01-19 21:00:38 +0000568
569 usage: [options] arg1 arg2
570
571 options:
572 -h, --help show this help message and exit
573 -v, --verbose make lots of noise [default]
574 -q, --quiet be vewwy quiet (I'm hunting wabbits)
575 -fFILE, --file=FILE write output to FILE
576 -mMODE, --mode=MODE interaction mode: one of 'novice', 'intermediate'
Georg Brandl7044b112009-01-03 21:04:55 +0000577 [default], 'expert'
Andrew M. Kuchling8b506e72008-01-19 21:00:38 +0000578
579 Dangerous Options:
Georg Brandl7044b112009-01-03 21:04:55 +0000580 Caution: use of these options is at your own risk. It is believed that
581 some of them bite.
582 -g Group option.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000583
584.. _optparse-printing-version-string:
585
586Printing a version string
587^^^^^^^^^^^^^^^^^^^^^^^^^
588
589Similar to the brief usage string, :mod:`optparse` can also print a version
590string for your program. You have to supply the string as the ``version``
591argument to OptionParser::
592
593 parser = OptionParser(usage="%prog [-f] [-q]", version="%prog 1.0")
594
595``"%prog"`` is expanded just like it is in ``usage``. Apart from that,
596``version`` can contain anything you like. When you supply it, :mod:`optparse`
597automatically adds a ``"--version"`` option to your parser. If it encounters
598this option on the command line, it expands your ``version`` string (by
599replacing ``"%prog"``), prints it to stdout, and exits.
600
601For example, if your script is called ``/usr/bin/foo``::
602
603 $ /usr/bin/foo --version
604 foo 1.0
605
Ezio Melottib9c3ed42010-01-04 21:43:02 +0000606The following two methods can be used to print and get the ``version`` string:
607
608.. method:: OptionParser.print_version(file=None)
609
610 Print the version message for the current program (``self.version``) to
611 *file* (default stdout). As with :meth:`print_usage`, any occurrence
612 of ``"%prog"`` in ``self.version`` is replaced with the name of the current
613 program. Does nothing if ``self.version`` is empty or undefined.
614
615.. method:: OptionParser.get_version()
616
617 Same as :meth:`print_version` but returns the version string instead of
618 printing it.
619
Georg Brandl8ec7f652007-08-15 14:28:01 +0000620
621.. _optparse-how-optparse-handles-errors:
622
623How :mod:`optparse` handles errors
624^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
625
626There are two broad classes of errors that :mod:`optparse` has to worry about:
627programmer errors and user errors. Programmer errors are usually erroneous
Georg Brandlb926ebb2009-09-17 17:14:04 +0000628calls to :func:`OptionParser.add_option`, e.g. invalid option strings, unknown
629option attributes, missing option attributes, etc. These are dealt with in the
630usual way: raise an exception (either :exc:`optparse.OptionError` or
631:exc:`TypeError`) and let the program crash.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000632
633Handling user errors is much more important, since they are guaranteed to happen
634no matter how stable your code is. :mod:`optparse` can automatically detect
635some user errors, such as bad option arguments (passing ``"-n 4x"`` where
636:option:`-n` takes an integer argument), missing arguments (``"-n"`` at the end
637of the command line, where :option:`-n` takes an argument of any type). Also,
Georg Brandlb926ebb2009-09-17 17:14:04 +0000638you can call :func:`OptionParser.error` to signal an application-defined error
Georg Brandl8ec7f652007-08-15 14:28:01 +0000639condition::
640
641 (options, args) = parser.parse_args()
642 [...]
643 if options.a and options.b:
644 parser.error("options -a and -b are mutually exclusive")
645
646In either case, :mod:`optparse` handles the error the same way: it prints the
647program's usage message and an error message to standard error and exits with
648error status 2.
649
650Consider the first example above, where the user passes ``"4x"`` to an option
651that takes an integer::
652
653 $ /usr/bin/foo -n 4x
654 usage: foo [options]
655
656 foo: error: option -n: invalid integer value: '4x'
657
658Or, where the user fails to pass a value at all::
659
660 $ /usr/bin/foo -n
661 usage: foo [options]
662
663 foo: error: -n option requires an argument
664
665:mod:`optparse`\ -generated error messages take care always to mention the
666option involved in the error; be sure to do the same when calling
Georg Brandlb926ebb2009-09-17 17:14:04 +0000667:func:`OptionParser.error` from your application code.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000668
Georg Brandl60c0be32008-06-13 13:26:54 +0000669If :mod:`optparse`'s default error-handling behaviour does not suit your needs,
Georg Brandl0c9eb432009-06-30 16:35:11 +0000670you'll need to subclass OptionParser and override its :meth:`~OptionParser.exit`
671and/or :meth:`~OptionParser.error` methods.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000672
673
674.. _optparse-putting-it-all-together:
675
676Putting it all together
677^^^^^^^^^^^^^^^^^^^^^^^
678
679Here's what :mod:`optparse`\ -based scripts usually look like::
680
681 from optparse import OptionParser
682 [...]
683 def main():
684 usage = "usage: %prog [options] arg"
685 parser = OptionParser(usage)
686 parser.add_option("-f", "--file", dest="filename",
687 help="read data from FILENAME")
688 parser.add_option("-v", "--verbose",
689 action="store_true", dest="verbose")
690 parser.add_option("-q", "--quiet",
691 action="store_false", dest="verbose")
692 [...]
693 (options, args) = parser.parse_args()
694 if len(args) != 1:
695 parser.error("incorrect number of arguments")
696 if options.verbose:
697 print "reading %s..." % options.filename
698 [...]
699
700 if __name__ == "__main__":
701 main()
702
Georg Brandl8ec7f652007-08-15 14:28:01 +0000703
704.. _optparse-reference-guide:
705
706Reference Guide
707---------------
708
709
710.. _optparse-creating-parser:
711
712Creating the parser
713^^^^^^^^^^^^^^^^^^^
714
Georg Brandlb926ebb2009-09-17 17:14:04 +0000715The first step in using :mod:`optparse` is to create an OptionParser instance.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000716
Georg Brandlb926ebb2009-09-17 17:14:04 +0000717.. class:: OptionParser(...)
Georg Brandl8ec7f652007-08-15 14:28:01 +0000718
Georg Brandlb926ebb2009-09-17 17:14:04 +0000719 The OptionParser constructor has no required arguments, but a number of
720 optional keyword arguments. You should always pass them as keyword
721 arguments, i.e. do not rely on the order in which the arguments are declared.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000722
723 ``usage`` (default: ``"%prog [options]"``)
Georg Brandlb926ebb2009-09-17 17:14:04 +0000724 The usage summary to print when your program is run incorrectly or with a
725 help option. When :mod:`optparse` prints the usage string, it expands
726 ``%prog`` to ``os.path.basename(sys.argv[0])`` (or to ``prog`` if you
727 passed that keyword argument). To suppress a usage message, pass the
728 special value :data:`optparse.SUPPRESS_USAGE`.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000729
730 ``option_list`` (default: ``[]``)
731 A list of Option objects to populate the parser with. The options in
Georg Brandlb926ebb2009-09-17 17:14:04 +0000732 ``option_list`` are added after any options in ``standard_option_list`` (a
733 class attribute that may be set by OptionParser subclasses), but before
734 any version or help options. Deprecated; use :meth:`add_option` after
735 creating the parser instead.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000736
737 ``option_class`` (default: optparse.Option)
738 Class to use when adding options to the parser in :meth:`add_option`.
739
740 ``version`` (default: ``None``)
Georg Brandlb926ebb2009-09-17 17:14:04 +0000741 A version string to print when the user supplies a version option. If you
742 supply a true value for ``version``, :mod:`optparse` automatically adds a
743 version option with the single option string ``"--version"``. The
744 substring ``"%prog"`` is expanded the same as for ``usage``.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000745
746 ``conflict_handler`` (default: ``"error"``)
Georg Brandlb926ebb2009-09-17 17:14:04 +0000747 Specifies what to do when options with conflicting option strings are
748 added to the parser; see section
749 :ref:`optparse-conflicts-between-options`.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000750
751 ``description`` (default: ``None``)
Georg Brandlb926ebb2009-09-17 17:14:04 +0000752 A paragraph of text giving a brief overview of your program.
753 :mod:`optparse` reformats this paragraph to fit the current terminal width
754 and prints it when the user requests help (after ``usage``, but before the
755 list of options).
Georg Brandl8ec7f652007-08-15 14:28:01 +0000756
Georg Brandlb926ebb2009-09-17 17:14:04 +0000757 ``formatter`` (default: a new :class:`IndentedHelpFormatter`)
758 An instance of optparse.HelpFormatter that will be used for printing help
759 text. :mod:`optparse` provides two concrete classes for this purpose:
Georg Brandl8ec7f652007-08-15 14:28:01 +0000760 IndentedHelpFormatter and TitledHelpFormatter.
761
762 ``add_help_option`` (default: ``True``)
763 If true, :mod:`optparse` will add a help option (with option strings ``"-h"``
764 and ``"--help"``) to the parser.
765
766 ``prog``
767 The string to use when expanding ``"%prog"`` in ``usage`` and ``version``
768 instead of ``os.path.basename(sys.argv[0])``.
769
770
771
772.. _optparse-populating-parser:
773
774Populating the parser
775^^^^^^^^^^^^^^^^^^^^^
776
777There are several ways to populate the parser with options. The preferred way
Georg Brandlb926ebb2009-09-17 17:14:04 +0000778is by using :meth:`OptionParser.add_option`, as shown in section
Georg Brandl8ec7f652007-08-15 14:28:01 +0000779:ref:`optparse-tutorial`. :meth:`add_option` can be called in one of two ways:
780
781* pass it an Option instance (as returned by :func:`make_option`)
782
783* pass it any combination of positional and keyword arguments that are
Georg Brandlb926ebb2009-09-17 17:14:04 +0000784 acceptable to :func:`make_option` (i.e., to the Option constructor), and it
785 will create the Option instance for you
Georg Brandl8ec7f652007-08-15 14:28:01 +0000786
787The other alternative is to pass a list of pre-constructed Option instances to
788the OptionParser constructor, as in::
789
790 option_list = [
791 make_option("-f", "--filename",
792 action="store", type="string", dest="filename"),
793 make_option("-q", "--quiet",
794 action="store_false", dest="verbose"),
795 ]
796 parser = OptionParser(option_list=option_list)
797
798(:func:`make_option` is a factory function for creating Option instances;
799currently it is an alias for the Option constructor. A future version of
800:mod:`optparse` may split Option into several classes, and :func:`make_option`
801will pick the right class to instantiate. Do not instantiate Option directly.)
802
803
804.. _optparse-defining-options:
805
806Defining options
807^^^^^^^^^^^^^^^^
808
809Each Option instance represents a set of synonymous command-line option strings,
810e.g. :option:`-f` and :option:`--file`. You can specify any number of short or
811long option strings, but you must specify at least one overall option string.
812
Georg Brandlb926ebb2009-09-17 17:14:04 +0000813The canonical way to create an :class:`Option` instance is with the
814:meth:`add_option` method of :class:`OptionParser`.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000815
Georg Brandlb926ebb2009-09-17 17:14:04 +0000816.. method:: OptionParser.add_option(opt_str[, ...], attr=value, ...)
Georg Brandl8ec7f652007-08-15 14:28:01 +0000817
Georg Brandlb926ebb2009-09-17 17:14:04 +0000818 To define an option with only a short option string::
Georg Brandl8ec7f652007-08-15 14:28:01 +0000819
Georg Brandlb926ebb2009-09-17 17:14:04 +0000820 parser.add_option("-f", attr=value, ...)
Georg Brandl8ec7f652007-08-15 14:28:01 +0000821
Georg Brandlb926ebb2009-09-17 17:14:04 +0000822 And to define an option with only a long option string::
Georg Brandl8ec7f652007-08-15 14:28:01 +0000823
Georg Brandlb926ebb2009-09-17 17:14:04 +0000824 parser.add_option("--foo", attr=value, ...)
Georg Brandl8ec7f652007-08-15 14:28:01 +0000825
Georg Brandlb926ebb2009-09-17 17:14:04 +0000826 The keyword arguments define attributes of the new Option object. The most
827 important option attribute is :attr:`~Option.action`, and it largely
828 determines which other attributes are relevant or required. If you pass
829 irrelevant option attributes, or fail to pass required ones, :mod:`optparse`
830 raises an :exc:`OptionError` exception explaining your mistake.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000831
Georg Brandlb926ebb2009-09-17 17:14:04 +0000832 An option's *action* determines what :mod:`optparse` does when it encounters
833 this option on the command-line. The standard option actions hard-coded into
834 :mod:`optparse` are:
Georg Brandl8ec7f652007-08-15 14:28:01 +0000835
Georg Brandlb926ebb2009-09-17 17:14:04 +0000836 ``"store"``
837 store this option's argument (default)
Georg Brandl8ec7f652007-08-15 14:28:01 +0000838
Georg Brandlb926ebb2009-09-17 17:14:04 +0000839 ``"store_const"``
840 store a constant value
Georg Brandl8ec7f652007-08-15 14:28:01 +0000841
Georg Brandlb926ebb2009-09-17 17:14:04 +0000842 ``"store_true"``
843 store a true value
Georg Brandl8ec7f652007-08-15 14:28:01 +0000844
Georg Brandlb926ebb2009-09-17 17:14:04 +0000845 ``"store_false"``
846 store a false value
Georg Brandl8ec7f652007-08-15 14:28:01 +0000847
Georg Brandlb926ebb2009-09-17 17:14:04 +0000848 ``"append"``
849 append this option's argument to a list
Georg Brandl8ec7f652007-08-15 14:28:01 +0000850
Georg Brandlb926ebb2009-09-17 17:14:04 +0000851 ``"append_const"``
852 append a constant value to a list
Georg Brandl8ec7f652007-08-15 14:28:01 +0000853
Georg Brandlb926ebb2009-09-17 17:14:04 +0000854 ``"count"``
855 increment a counter by one
Georg Brandl8ec7f652007-08-15 14:28:01 +0000856
Georg Brandlb926ebb2009-09-17 17:14:04 +0000857 ``"callback"``
858 call a specified function
Georg Brandl8ec7f652007-08-15 14:28:01 +0000859
Georg Brandlb926ebb2009-09-17 17:14:04 +0000860 ``"help"``
861 print a usage message including all options and the documentation for them
Georg Brandl8ec7f652007-08-15 14:28:01 +0000862
Georg Brandlb926ebb2009-09-17 17:14:04 +0000863 (If you don't supply an action, the default is ``"store"``. For this action,
864 you may also supply :attr:`~Option.type` and :attr:`~Option.dest` option
865 attributes; see :ref:`optparse-standard-option-actions`.)
Georg Brandl8ec7f652007-08-15 14:28:01 +0000866
867As you can see, most actions involve storing or updating a value somewhere.
868:mod:`optparse` always creates a special object for this, conventionally called
Georg Brandlb926ebb2009-09-17 17:14:04 +0000869``options`` (it happens to be an instance of :class:`optparse.Values`). Option
Georg Brandl8ec7f652007-08-15 14:28:01 +0000870arguments (and various other values) are stored as attributes of this object,
Georg Brandlb926ebb2009-09-17 17:14:04 +0000871according to the :attr:`~Option.dest` (destination) option attribute.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000872
Georg Brandlb926ebb2009-09-17 17:14:04 +0000873For example, when you call ::
Georg Brandl8ec7f652007-08-15 14:28:01 +0000874
875 parser.parse_args()
876
877one of the first things :mod:`optparse` does is create the ``options`` object::
878
879 options = Values()
880
Georg Brandlb926ebb2009-09-17 17:14:04 +0000881If one of the options in this parser is defined with ::
Georg Brandl8ec7f652007-08-15 14:28:01 +0000882
883 parser.add_option("-f", "--file", action="store", type="string", dest="filename")
884
885and the command-line being parsed includes any of the following::
886
887 -ffoo
888 -f foo
889 --file=foo
890 --file foo
891
Georg Brandlb926ebb2009-09-17 17:14:04 +0000892then :mod:`optparse`, on seeing this option, will do the equivalent of ::
Georg Brandl8ec7f652007-08-15 14:28:01 +0000893
894 options.filename = "foo"
895
Georg Brandlb926ebb2009-09-17 17:14:04 +0000896The :attr:`~Option.type` and :attr:`~Option.dest` option attributes are almost
897as important as :attr:`~Option.action`, but :attr:`~Option.action` is the only
898one that makes sense for *all* options.
899
900
901.. _optparse-option-attributes:
902
903Option attributes
904^^^^^^^^^^^^^^^^^
905
906The following option attributes may be passed as keyword arguments to
907:meth:`OptionParser.add_option`. If you pass an option attribute that is not
908relevant to a particular option, or fail to pass a required option attribute,
909:mod:`optparse` raises :exc:`OptionError`.
910
911.. attribute:: Option.action
912
913 (default: ``"store"``)
914
915 Determines :mod:`optparse`'s behaviour when this option is seen on the
916 command line; the available options are documented :ref:`here
917 <optparse-standard-option-actions>`.
918
919.. attribute:: Option.type
920
921 (default: ``"string"``)
922
923 The argument type expected by this option (e.g., ``"string"`` or ``"int"``);
924 the available option types are documented :ref:`here
925 <optparse-standard-option-types>`.
926
927.. attribute:: Option.dest
928
929 (default: derived from option strings)
930
931 If the option's action implies writing or modifying a value somewhere, this
932 tells :mod:`optparse` where to write it: :attr:`~Option.dest` names an
933 attribute of the ``options`` object that :mod:`optparse` builds as it parses
934 the command line.
935
936.. attribute:: Option.default
937
938 The value to use for this option's destination if the option is not seen on
939 the command line. See also :meth:`OptionParser.set_defaults`.
940
941.. attribute:: Option.nargs
942
943 (default: 1)
944
945 How many arguments of type :attr:`~Option.type` should be consumed when this
946 option is seen. If > 1, :mod:`optparse` will store a tuple of values to
947 :attr:`~Option.dest`.
948
949.. attribute:: Option.const
950
951 For actions that store a constant value, the constant value to store.
952
953.. attribute:: Option.choices
954
955 For options of type ``"choice"``, the list of strings the user may choose
956 from.
957
958.. attribute:: Option.callback
959
960 For options with action ``"callback"``, the callable to call when this option
961 is seen. See section :ref:`optparse-option-callbacks` for detail on the
962 arguments passed to the callable.
963
964.. attribute:: Option.callback_args
965 Option.callback_kwargs
966
967 Additional positional and keyword arguments to pass to ``callback`` after the
968 four standard callback arguments.
969
970.. attribute:: Option.help
971
972 Help text to print for this option when listing all available options after
973 the user supplies a :attr:`~Option.help` option (such as ``"--help"``). If
974 no help text is supplied, the option will be listed without help text. To
975 hide this option, use the special value :data:`optparse.SUPPRESS_HELP`.
976
977.. attribute:: Option.metavar
978
979 (default: derived from option strings)
980
981 Stand-in for the option argument(s) to use when printing help text. See
982 section :ref:`optparse-tutorial` for an example.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000983
984
985.. _optparse-standard-option-actions:
986
987Standard option actions
988^^^^^^^^^^^^^^^^^^^^^^^
989
990The various option actions all have slightly different requirements and effects.
991Most actions have several relevant option attributes which you may specify to
992guide :mod:`optparse`'s behaviour; a few have required attributes, which you
993must specify for any option using that action.
994
Georg Brandlb926ebb2009-09-17 17:14:04 +0000995* ``"store"`` [relevant: :attr:`~Option.type`, :attr:`~Option.dest`,
996 :attr:`~Option.nargs`, :attr:`~Option.choices`]
Georg Brandl8ec7f652007-08-15 14:28:01 +0000997
998 The option must be followed by an argument, which is converted to a value
Georg Brandlb926ebb2009-09-17 17:14:04 +0000999 according to :attr:`~Option.type` and stored in :attr:`~Option.dest`. If
1000 :attr:`~Option.nargs` > 1, multiple arguments will be consumed from the
1001 command line; all will be converted according to :attr:`~Option.type` and
1002 stored to :attr:`~Option.dest` as a tuple. See the
1003 :ref:`optparse-standard-option-types` section.
Georg Brandl8ec7f652007-08-15 14:28:01 +00001004
Georg Brandlb926ebb2009-09-17 17:14:04 +00001005 If :attr:`~Option.choices` is supplied (a list or tuple of strings), the type
1006 defaults to ``"choice"``.
Georg Brandl8ec7f652007-08-15 14:28:01 +00001007
Georg Brandlb926ebb2009-09-17 17:14:04 +00001008 If :attr:`~Option.type` is not supplied, it defaults to ``"string"``.
Georg Brandl8ec7f652007-08-15 14:28:01 +00001009
Georg Brandlb926ebb2009-09-17 17:14:04 +00001010 If :attr:`~Option.dest` is not supplied, :mod:`optparse` derives a destination
1011 from the first long option string (e.g., ``"--foo-bar"`` implies
1012 ``foo_bar``). If there are no long option strings, :mod:`optparse` derives a
1013 destination from the first short option string (e.g., ``"-f"`` implies ``f``).
Georg Brandl8ec7f652007-08-15 14:28:01 +00001014
1015 Example::
1016
1017 parser.add_option("-f")
1018 parser.add_option("-p", type="float", nargs=3, dest="point")
1019
Georg Brandlb926ebb2009-09-17 17:14:04 +00001020 As it parses the command line ::
Georg Brandl8ec7f652007-08-15 14:28:01 +00001021
1022 -f foo.txt -p 1 -3.5 4 -fbar.txt
1023
Georg Brandlb926ebb2009-09-17 17:14:04 +00001024 :mod:`optparse` will set ::
Georg Brandl8ec7f652007-08-15 14:28:01 +00001025
1026 options.f = "foo.txt"
1027 options.point = (1.0, -3.5, 4.0)
1028 options.f = "bar.txt"
1029
Georg Brandlb926ebb2009-09-17 17:14:04 +00001030* ``"store_const"`` [required: :attr:`~Option.const`; relevant:
1031 :attr:`~Option.dest`]
Georg Brandl8ec7f652007-08-15 14:28:01 +00001032
Georg Brandlb926ebb2009-09-17 17:14:04 +00001033 The value :attr:`~Option.const` is stored in :attr:`~Option.dest`.
Georg Brandl8ec7f652007-08-15 14:28:01 +00001034
1035 Example::
1036
1037 parser.add_option("-q", "--quiet",
1038 action="store_const", const=0, dest="verbose")
1039 parser.add_option("-v", "--verbose",
1040 action="store_const", const=1, dest="verbose")
1041 parser.add_option("--noisy",
1042 action="store_const", const=2, dest="verbose")
1043
1044 If ``"--noisy"`` is seen, :mod:`optparse` will set ::
1045
1046 options.verbose = 2
1047
Georg Brandlb926ebb2009-09-17 17:14:04 +00001048* ``"store_true"`` [relevant: :attr:`~Option.dest`]
Georg Brandl8ec7f652007-08-15 14:28:01 +00001049
Georg Brandlb926ebb2009-09-17 17:14:04 +00001050 A special case of ``"store_const"`` that stores a true value to
1051 :attr:`~Option.dest`.
Georg Brandl8ec7f652007-08-15 14:28:01 +00001052
Georg Brandlb926ebb2009-09-17 17:14:04 +00001053* ``"store_false"`` [relevant: :attr:`~Option.dest`]
Georg Brandl8ec7f652007-08-15 14:28:01 +00001054
Georg Brandlb926ebb2009-09-17 17:14:04 +00001055 Like ``"store_true"``, but stores a false value.
Georg Brandl8ec7f652007-08-15 14:28:01 +00001056
1057 Example::
1058
1059 parser.add_option("--clobber", action="store_true", dest="clobber")
1060 parser.add_option("--no-clobber", action="store_false", dest="clobber")
1061
Georg Brandlb926ebb2009-09-17 17:14:04 +00001062* ``"append"`` [relevant: :attr:`~Option.type`, :attr:`~Option.dest`,
1063 :attr:`~Option.nargs`, :attr:`~Option.choices`]
Georg Brandl8ec7f652007-08-15 14:28:01 +00001064
1065 The option must be followed by an argument, which is appended to the list in
Georg Brandlb926ebb2009-09-17 17:14:04 +00001066 :attr:`~Option.dest`. If no default value for :attr:`~Option.dest` is
1067 supplied, an empty list is automatically created when :mod:`optparse` first
1068 encounters this option on the command-line. If :attr:`~Option.nargs` > 1,
1069 multiple arguments are consumed, and a tuple of length :attr:`~Option.nargs`
1070 is appended to :attr:`~Option.dest`.
Georg Brandl8ec7f652007-08-15 14:28:01 +00001071
Georg Brandlb926ebb2009-09-17 17:14:04 +00001072 The defaults for :attr:`~Option.type` and :attr:`~Option.dest` are the same as
1073 for the ``"store"`` action.
Georg Brandl8ec7f652007-08-15 14:28:01 +00001074
1075 Example::
1076
1077 parser.add_option("-t", "--tracks", action="append", type="int")
1078
1079 If ``"-t3"`` is seen on the command-line, :mod:`optparse` does the equivalent
1080 of::
1081
1082 options.tracks = []
1083 options.tracks.append(int("3"))
1084
1085 If, a little later on, ``"--tracks=4"`` is seen, it does::
1086
1087 options.tracks.append(int("4"))
1088
Georg Brandlb926ebb2009-09-17 17:14:04 +00001089* ``"append_const"`` [required: :attr:`~Option.const`; relevant:
1090 :attr:`~Option.dest`]
Georg Brandl8ec7f652007-08-15 14:28:01 +00001091
Georg Brandlb926ebb2009-09-17 17:14:04 +00001092 Like ``"store_const"``, but the value :attr:`~Option.const` is appended to
1093 :attr:`~Option.dest`; as with ``"append"``, :attr:`~Option.dest` defaults to
1094 ``None``, and an empty list is automatically created the first time the option
1095 is encountered.
Georg Brandl8ec7f652007-08-15 14:28:01 +00001096
Georg Brandlb926ebb2009-09-17 17:14:04 +00001097* ``"count"`` [relevant: :attr:`~Option.dest`]
Georg Brandl8ec7f652007-08-15 14:28:01 +00001098
Georg Brandlb926ebb2009-09-17 17:14:04 +00001099 Increment the integer stored at :attr:`~Option.dest`. If no default value is
1100 supplied, :attr:`~Option.dest` is set to zero before being incremented the
1101 first time.
Georg Brandl8ec7f652007-08-15 14:28:01 +00001102
1103 Example::
1104
1105 parser.add_option("-v", action="count", dest="verbosity")
1106
1107 The first time ``"-v"`` is seen on the command line, :mod:`optparse` does the
1108 equivalent of::
1109
1110 options.verbosity = 0
1111 options.verbosity += 1
1112
1113 Every subsequent occurrence of ``"-v"`` results in ::
1114
1115 options.verbosity += 1
1116
Georg Brandlb926ebb2009-09-17 17:14:04 +00001117* ``"callback"`` [required: :attr:`~Option.callback`; relevant:
1118 :attr:`~Option.type`, :attr:`~Option.nargs`, :attr:`~Option.callback_args`,
1119 :attr:`~Option.callback_kwargs`]
Georg Brandl8ec7f652007-08-15 14:28:01 +00001120
Georg Brandlb926ebb2009-09-17 17:14:04 +00001121 Call the function specified by :attr:`~Option.callback`, which is called as ::
Georg Brandl8ec7f652007-08-15 14:28:01 +00001122
1123 func(option, opt_str, value, parser, *args, **kwargs)
1124
1125 See section :ref:`optparse-option-callbacks` for more detail.
1126
Georg Brandlb926ebb2009-09-17 17:14:04 +00001127* ``"help"``
Georg Brandl8ec7f652007-08-15 14:28:01 +00001128
Georg Brandlb926ebb2009-09-17 17:14:04 +00001129 Prints a complete help message for all the options in the current option
1130 parser. The help message is constructed from the ``usage`` string passed to
1131 OptionParser's constructor and the :attr:`~Option.help` string passed to every
1132 option.
Georg Brandl8ec7f652007-08-15 14:28:01 +00001133
Georg Brandlb926ebb2009-09-17 17:14:04 +00001134 If no :attr:`~Option.help` string is supplied for an option, it will still be
1135 listed in the help message. To omit an option entirely, use the special value
1136 :data:`optparse.SUPPRESS_HELP`.
Georg Brandl8ec7f652007-08-15 14:28:01 +00001137
Georg Brandlb926ebb2009-09-17 17:14:04 +00001138 :mod:`optparse` automatically adds a :attr:`~Option.help` option to all
1139 OptionParsers, so you do not normally need to create one.
Georg Brandl8ec7f652007-08-15 14:28:01 +00001140
1141 Example::
1142
1143 from optparse import OptionParser, SUPPRESS_HELP
1144
Georg Brandl718b2212009-09-16 13:11:06 +00001145 # usually, a help option is added automatically, but that can
1146 # be suppressed using the add_help_option argument
1147 parser = OptionParser(add_help_option=False)
1148
Georg Brandld7226ff2009-09-16 13:06:22 +00001149 parser.add_option("-h", "--help", action="help")
Georg Brandl8ec7f652007-08-15 14:28:01 +00001150 parser.add_option("-v", action="store_true", dest="verbose",
1151 help="Be moderately verbose")
1152 parser.add_option("--file", dest="filename",
Georg Brandld7226ff2009-09-16 13:06:22 +00001153 help="Input file to read data from")
Georg Brandl8ec7f652007-08-15 14:28:01 +00001154 parser.add_option("--secret", help=SUPPRESS_HELP)
1155
Georg Brandlb926ebb2009-09-17 17:14:04 +00001156 If :mod:`optparse` sees either ``"-h"`` or ``"--help"`` on the command line,
1157 it will print something like the following help message to stdout (assuming
Ezio Melotti5129ed32010-01-03 09:01:27 +00001158 ``sys.argv[0]`` is ``"foo.py"``):
1159
1160 .. code-block:: text
Georg Brandl8ec7f652007-08-15 14:28:01 +00001161
1162 usage: foo.py [options]
1163
1164 options:
1165 -h, --help Show this help message and exit
1166 -v Be moderately verbose
1167 --file=FILENAME Input file to read data from
1168
1169 After printing the help message, :mod:`optparse` terminates your process with
1170 ``sys.exit(0)``.
1171
Georg Brandlb926ebb2009-09-17 17:14:04 +00001172* ``"version"``
Georg Brandl8ec7f652007-08-15 14:28:01 +00001173
Georg Brandlb926ebb2009-09-17 17:14:04 +00001174 Prints the version number supplied to the OptionParser to stdout and exits.
1175 The version number is actually formatted and printed by the
1176 ``print_version()`` method of OptionParser. Generally only relevant if the
1177 ``version`` argument is supplied to the OptionParser constructor. As with
1178 :attr:`~Option.help` options, you will rarely create ``version`` options,
1179 since :mod:`optparse` automatically adds them when needed.
Georg Brandl8ec7f652007-08-15 14:28:01 +00001180
1181
1182.. _optparse-standard-option-types:
1183
1184Standard option types
1185^^^^^^^^^^^^^^^^^^^^^
1186
Georg Brandlb926ebb2009-09-17 17:14:04 +00001187:mod:`optparse` has six built-in option types: ``"string"``, ``"int"``,
1188``"long"``, ``"choice"``, ``"float"`` and ``"complex"``. If you need to add new
1189option types, see section :ref:`optparse-extending-optparse`.
Georg Brandl8ec7f652007-08-15 14:28:01 +00001190
1191Arguments to string options are not checked or converted in any way: the text on
1192the command line is stored in the destination (or passed to the callback) as-is.
1193
Georg Brandlb926ebb2009-09-17 17:14:04 +00001194Integer arguments (type ``"int"`` or ``"long"``) are parsed as follows:
Georg Brandl8ec7f652007-08-15 14:28:01 +00001195
1196* if the number starts with ``0x``, it is parsed as a hexadecimal number
1197
1198* if the number starts with ``0``, it is parsed as an octal number
1199
Georg Brandl97ca5832007-09-24 17:55:47 +00001200* if the number starts with ``0b``, it is parsed as a binary number
Georg Brandl8ec7f652007-08-15 14:28:01 +00001201
1202* otherwise, the number is parsed as a decimal number
1203
1204
Georg Brandlb926ebb2009-09-17 17:14:04 +00001205The conversion is done by calling either :func:`int` or :func:`long` with the
Georg Brandl8ec7f652007-08-15 14:28:01 +00001206appropriate base (2, 8, 10, or 16). If this fails, so will :mod:`optparse`,
1207although with a more useful error message.
1208
Georg Brandlb926ebb2009-09-17 17:14:04 +00001209``"float"`` and ``"complex"`` option arguments are converted directly with
1210:func:`float` and :func:`complex`, with similar error-handling.
Georg Brandl8ec7f652007-08-15 14:28:01 +00001211
Georg Brandlb926ebb2009-09-17 17:14:04 +00001212``"choice"`` options are a subtype of ``"string"`` options. The
1213:attr:`~Option.choices`` option attribute (a sequence of strings) defines the
1214set of allowed option arguments. :func:`optparse.check_choice` compares
1215user-supplied option arguments against this master list and raises
1216:exc:`OptionValueError` if an invalid string is given.
Georg Brandl8ec7f652007-08-15 14:28:01 +00001217
1218
1219.. _optparse-parsing-arguments:
1220
1221Parsing arguments
1222^^^^^^^^^^^^^^^^^
1223
1224The whole point of creating and populating an OptionParser is to call its
1225:meth:`parse_args` method::
1226
1227 (options, args) = parser.parse_args(args=None, values=None)
1228
1229where the input parameters are
1230
1231``args``
1232 the list of arguments to process (default: ``sys.argv[1:]``)
1233
1234``values``
Georg Brandl8514b852009-09-01 08:06:03 +00001235 object to store option arguments in (default: a new instance of
1236 :class:`optparse.Values`)
Georg Brandl8ec7f652007-08-15 14:28:01 +00001237
1238and the return values are
1239
1240``options``
Georg Brandl8514b852009-09-01 08:06:03 +00001241 the same object that was passed in as ``values``, or the optparse.Values
Georg Brandl8ec7f652007-08-15 14:28:01 +00001242 instance created by :mod:`optparse`
1243
1244``args``
1245 the leftover positional arguments after all options have been processed
1246
1247The most common usage is to supply neither keyword argument. If you supply
Georg Brandlb926ebb2009-09-17 17:14:04 +00001248``values``, it will be modified with repeated :func:`setattr` calls (roughly one
Georg Brandl8ec7f652007-08-15 14:28:01 +00001249for every option argument stored to an option destination) and returned by
1250:meth:`parse_args`.
1251
1252If :meth:`parse_args` encounters any errors in the argument list, it calls the
1253OptionParser's :meth:`error` method with an appropriate end-user error message.
1254This ultimately terminates your process with an exit status of 2 (the
1255traditional Unix exit status for command-line errors).
1256
1257
1258.. _optparse-querying-manipulating-option-parser:
1259
1260Querying and manipulating your option parser
1261^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1262
Georg Brandlb926ebb2009-09-17 17:14:04 +00001263The default behavior of the option parser can be customized slightly, and you
1264can also poke around your option parser and see what's there. OptionParser
1265provides several methods to help you out:
Georg Brandl8ec7f652007-08-15 14:28:01 +00001266
Georg Brandlb926ebb2009-09-17 17:14:04 +00001267.. method:: OptionParser.disable_interspersed_args()
Georg Brandl7842a412009-09-17 16:26:06 +00001268
Georg Brandlb926ebb2009-09-17 17:14:04 +00001269 Set parsing to stop on the first non-option. For example, if ``"-a"`` and
1270 ``"-b"`` are both simple options that take no arguments, :mod:`optparse`
1271 normally accepts this syntax::
Georg Brandl7842a412009-09-17 16:26:06 +00001272
Georg Brandlb926ebb2009-09-17 17:14:04 +00001273 prog -a arg1 -b arg2
Georg Brandl7842a412009-09-17 16:26:06 +00001274
Georg Brandlb926ebb2009-09-17 17:14:04 +00001275 and treats it as equivalent to ::
Georg Brandl7842a412009-09-17 16:26:06 +00001276
Georg Brandlb926ebb2009-09-17 17:14:04 +00001277 prog -a -b arg1 arg2
Georg Brandl7842a412009-09-17 16:26:06 +00001278
Georg Brandlb926ebb2009-09-17 17:14:04 +00001279 To disable this feature, call :meth:`disable_interspersed_args`. This
1280 restores traditional Unix syntax, where option parsing stops with the first
1281 non-option argument.
Andrew M. Kuchling7a4a93b2008-09-28 01:08:47 +00001282
Georg Brandlb926ebb2009-09-17 17:14:04 +00001283 Use this if you have a command processor which runs another command which has
1284 options of its own and you want to make sure these options don't get
1285 confused. For example, each command might have a different set of options.
Georg Brandl8ec7f652007-08-15 14:28:01 +00001286
Georg Brandlb926ebb2009-09-17 17:14:04 +00001287.. method:: OptionParser.enable_interspersed_args()
1288
1289 Set parsing to not stop on the first non-option, allowing interspersing
1290 switches with command arguments. This is the default behavior.
1291
1292.. method:: OptionParser.get_option(opt_str)
1293
1294 Returns the Option instance with the option string *opt_str*, or ``None`` if
Georg Brandl8ec7f652007-08-15 14:28:01 +00001295 no options have that option string.
1296
Georg Brandlb926ebb2009-09-17 17:14:04 +00001297.. method:: OptionParser.has_option(opt_str)
1298
1299 Return true if the OptionParser has an option with option string *opt_str*
Andrew M. Kuchling7a4a93b2008-09-28 01:08:47 +00001300 (e.g., ``"-q"`` or ``"--verbose"``).
1301
Georg Brandlb926ebb2009-09-17 17:14:04 +00001302.. method:: OptionParser.remove_option(opt_str)
1303
1304 If the :class:`OptionParser` has an option corresponding to *opt_str*, that
1305 option is removed. If that option provided any other option strings, all of
1306 those option strings become invalid. If *opt_str* does not occur in any
1307 option belonging to this :class:`OptionParser`, raises :exc:`ValueError`.
Georg Brandl8ec7f652007-08-15 14:28:01 +00001308
1309
1310.. _optparse-conflicts-between-options:
1311
1312Conflicts between options
1313^^^^^^^^^^^^^^^^^^^^^^^^^
1314
1315If you're not careful, it's easy to define options with conflicting option
1316strings::
1317
1318 parser.add_option("-n", "--dry-run", ...)
1319 [...]
1320 parser.add_option("-n", "--noisy", ...)
1321
1322(This is particularly true if you've defined your own OptionParser subclass with
1323some standard options.)
1324
1325Every time you add an option, :mod:`optparse` checks for conflicts with existing
1326options. If it finds any, it invokes the current conflict-handling mechanism.
1327You can set the conflict-handling mechanism either in the constructor::
1328
1329 parser = OptionParser(..., conflict_handler=handler)
1330
1331or with a separate call::
1332
1333 parser.set_conflict_handler(handler)
1334
1335The available conflict handlers are:
1336
Georg Brandlb926ebb2009-09-17 17:14:04 +00001337 ``"error"`` (default)
1338 assume option conflicts are a programming error and raise
1339 :exc:`OptionConflictError`
Georg Brandl8ec7f652007-08-15 14:28:01 +00001340
Georg Brandlb926ebb2009-09-17 17:14:04 +00001341 ``"resolve"``
Georg Brandl8ec7f652007-08-15 14:28:01 +00001342 resolve option conflicts intelligently (see below)
1343
1344
Andrew M. Kuchlingcad8da82008-09-30 13:01:46 +00001345As an example, let's define an :class:`OptionParser` that resolves conflicts
Georg Brandl8ec7f652007-08-15 14:28:01 +00001346intelligently and add conflicting options to it::
1347
1348 parser = OptionParser(conflict_handler="resolve")
1349 parser.add_option("-n", "--dry-run", ..., help="do no harm")
1350 parser.add_option("-n", "--noisy", ..., help="be noisy")
1351
1352At this point, :mod:`optparse` detects that a previously-added option is already
1353using the ``"-n"`` option string. Since ``conflict_handler`` is ``"resolve"``,
1354it resolves the situation by removing ``"-n"`` from the earlier option's list of
1355option strings. Now ``"--dry-run"`` is the only way for the user to activate
1356that option. If the user asks for help, the help message will reflect that::
1357
1358 options:
1359 --dry-run do no harm
1360 [...]
1361 -n, --noisy be noisy
1362
1363It's possible to whittle away the option strings for a previously-added option
1364until there are none left, and the user has no way of invoking that option from
1365the command-line. In that case, :mod:`optparse` removes that option completely,
1366so it doesn't show up in help text or anywhere else. Carrying on with our
1367existing OptionParser::
1368
1369 parser.add_option("--dry-run", ..., help="new dry-run option")
1370
1371At this point, the original :option:`-n/--dry-run` option is no longer
1372accessible, so :mod:`optparse` removes it, leaving this help text::
1373
1374 options:
1375 [...]
1376 -n, --noisy be noisy
1377 --dry-run new dry-run option
1378
1379
1380.. _optparse-cleanup:
1381
1382Cleanup
1383^^^^^^^
1384
1385OptionParser instances have several cyclic references. This should not be a
1386problem for Python's garbage collector, but you may wish to break the cyclic
Georg Brandlb926ebb2009-09-17 17:14:04 +00001387references explicitly by calling :meth:`~OptionParser.destroy` on your
1388OptionParser once you are done with it. This is particularly useful in
1389long-running applications where large object graphs are reachable from your
1390OptionParser.
Georg Brandl8ec7f652007-08-15 14:28:01 +00001391
1392
1393.. _optparse-other-methods:
1394
1395Other methods
1396^^^^^^^^^^^^^
1397
1398OptionParser supports several other public methods:
1399
Georg Brandlb926ebb2009-09-17 17:14:04 +00001400.. method:: OptionParser.set_usage(usage)
Georg Brandl8ec7f652007-08-15 14:28:01 +00001401
Georg Brandlb926ebb2009-09-17 17:14:04 +00001402 Set the usage string according to the rules described above for the ``usage``
1403 constructor keyword argument. Passing ``None`` sets the default usage
1404 string; use :data:`optparse.SUPPRESS_USAGE` to suppress a usage message.
Georg Brandl8ec7f652007-08-15 14:28:01 +00001405
Ezio Melottib9c3ed42010-01-04 21:43:02 +00001406.. method:: OptionParser.print_usage(file=None)
1407
1408 Print the usage message for the current program (``self.usage``) to *file*
1409 (default stdout). Any occurrence of the string ``"%prog"`` in ``self.usage``
1410 is replaced with the name of the current program. Does nothing if
1411 ``self.usage`` is empty or not defined.
1412
1413.. method:: OptionParser.get_usage()
1414
1415 Same as :meth:`print_usage` but returns the usage string instead of
1416 printing it.
1417
Georg Brandlb926ebb2009-09-17 17:14:04 +00001418.. method:: OptionParser.set_defaults(dest=value, ...)
Georg Brandl8ec7f652007-08-15 14:28:01 +00001419
Georg Brandlb926ebb2009-09-17 17:14:04 +00001420 Set default values for several option destinations at once. Using
1421 :meth:`set_defaults` is the preferred way to set default values for options,
1422 since multiple options can share the same destination. For example, if
1423 several "mode" options all set the same destination, any one of them can set
1424 the default, and the last one wins::
Georg Brandl8ec7f652007-08-15 14:28:01 +00001425
Georg Brandlb926ebb2009-09-17 17:14:04 +00001426 parser.add_option("--advanced", action="store_const",
1427 dest="mode", const="advanced",
1428 default="novice") # overridden below
1429 parser.add_option("--novice", action="store_const",
1430 dest="mode", const="novice",
1431 default="advanced") # overrides above setting
Georg Brandl8ec7f652007-08-15 14:28:01 +00001432
Georg Brandlb926ebb2009-09-17 17:14:04 +00001433 To avoid this confusion, use :meth:`set_defaults`::
Georg Brandl8ec7f652007-08-15 14:28:01 +00001434
Georg Brandlb926ebb2009-09-17 17:14:04 +00001435 parser.set_defaults(mode="advanced")
1436 parser.add_option("--advanced", action="store_const",
1437 dest="mode", const="advanced")
1438 parser.add_option("--novice", action="store_const",
1439 dest="mode", const="novice")
Georg Brandl8ec7f652007-08-15 14:28:01 +00001440
Georg Brandl8ec7f652007-08-15 14:28:01 +00001441
1442.. _optparse-option-callbacks:
1443
1444Option Callbacks
1445----------------
1446
1447When :mod:`optparse`'s built-in actions and types aren't quite enough for your
1448needs, you have two choices: extend :mod:`optparse` or define a callback option.
1449Extending :mod:`optparse` is more general, but overkill for a lot of simple
1450cases. Quite often a simple callback is all you need.
1451
1452There are two steps to defining a callback option:
1453
Georg Brandlb926ebb2009-09-17 17:14:04 +00001454* define the option itself using the ``"callback"`` action
Georg Brandl8ec7f652007-08-15 14:28:01 +00001455
1456* write the callback; this is a function (or method) that takes at least four
1457 arguments, as described below
1458
1459
1460.. _optparse-defining-callback-option:
1461
1462Defining a callback option
1463^^^^^^^^^^^^^^^^^^^^^^^^^^
1464
1465As always, the easiest way to define a callback option is by using the
Georg Brandlb926ebb2009-09-17 17:14:04 +00001466:meth:`OptionParser.add_option` method. Apart from :attr:`~Option.action`, the
1467only option attribute you must specify is ``callback``, the function to call::
Georg Brandl8ec7f652007-08-15 14:28:01 +00001468
1469 parser.add_option("-c", action="callback", callback=my_callback)
1470
1471``callback`` is a function (or other callable object), so you must have already
1472defined ``my_callback()`` when you create this callback option. In this simple
1473case, :mod:`optparse` doesn't even know if :option:`-c` takes any arguments,
1474which usually means that the option takes no arguments---the mere presence of
1475:option:`-c` on the command-line is all it needs to know. In some
1476circumstances, though, you might want your callback to consume an arbitrary
1477number of command-line arguments. This is where writing callbacks gets tricky;
1478it's covered later in this section.
1479
1480:mod:`optparse` always passes four particular arguments to your callback, and it
Georg Brandlb926ebb2009-09-17 17:14:04 +00001481will only pass additional arguments if you specify them via
1482:attr:`~Option.callback_args` and :attr:`~Option.callback_kwargs`. Thus, the
1483minimal callback function signature is::
Georg Brandl8ec7f652007-08-15 14:28:01 +00001484
1485 def my_callback(option, opt, value, parser):
1486
1487The four arguments to a callback are described below.
1488
1489There are several other option attributes that you can supply when you define a
1490callback option:
1491
Georg Brandlb926ebb2009-09-17 17:14:04 +00001492:attr:`~Option.type`
1493 has its usual meaning: as with the ``"store"`` or ``"append"`` actions, it
1494 instructs :mod:`optparse` to consume one argument and convert it to
1495 :attr:`~Option.type`. Rather than storing the converted value(s) anywhere,
1496 though, :mod:`optparse` passes it to your callback function.
Georg Brandl8ec7f652007-08-15 14:28:01 +00001497
Georg Brandlb926ebb2009-09-17 17:14:04 +00001498:attr:`~Option.nargs`
Georg Brandl8ec7f652007-08-15 14:28:01 +00001499 also has its usual meaning: if it is supplied and > 1, :mod:`optparse` will
Georg Brandlb926ebb2009-09-17 17:14:04 +00001500 consume :attr:`~Option.nargs` arguments, each of which must be convertible to
1501 :attr:`~Option.type`. It then passes a tuple of converted values to your
1502 callback.
Georg Brandl8ec7f652007-08-15 14:28:01 +00001503
Georg Brandlb926ebb2009-09-17 17:14:04 +00001504:attr:`~Option.callback_args`
Georg Brandl8ec7f652007-08-15 14:28:01 +00001505 a tuple of extra positional arguments to pass to the callback
1506
Georg Brandlb926ebb2009-09-17 17:14:04 +00001507:attr:`~Option.callback_kwargs`
Georg Brandl8ec7f652007-08-15 14:28:01 +00001508 a dictionary of extra keyword arguments to pass to the callback
1509
1510
1511.. _optparse-how-callbacks-called:
1512
1513How callbacks are called
1514^^^^^^^^^^^^^^^^^^^^^^^^
1515
1516All callbacks are called as follows::
1517
1518 func(option, opt_str, value, parser, *args, **kwargs)
1519
1520where
1521
1522``option``
1523 is the Option instance that's calling the callback
1524
1525``opt_str``
1526 is the option string seen on the command-line that's triggering the callback.
Georg Brandlb926ebb2009-09-17 17:14:04 +00001527 (If an abbreviated long option was used, ``opt_str`` will be the full,
1528 canonical option string---e.g. if the user puts ``"--foo"`` on the
1529 command-line as an abbreviation for ``"--foobar"``, then ``opt_str`` will be
1530 ``"--foobar"``.)
Georg Brandl8ec7f652007-08-15 14:28:01 +00001531
1532``value``
1533 is the argument to this option seen on the command-line. :mod:`optparse` will
Georg Brandlb926ebb2009-09-17 17:14:04 +00001534 only expect an argument if :attr:`~Option.type` is set; the type of ``value`` will be
1535 the type implied by the option's type. If :attr:`~Option.type` for this option is
1536 ``None`` (no argument expected), then ``value`` will be ``None``. If :attr:`~Option.nargs`
Georg Brandl8ec7f652007-08-15 14:28:01 +00001537 > 1, ``value`` will be a tuple of values of the appropriate type.
1538
1539``parser``
Georg Brandlb926ebb2009-09-17 17:14:04 +00001540 is the OptionParser instance driving the whole thing, mainly useful because
1541 you can access some other interesting data through its instance attributes:
Georg Brandl8ec7f652007-08-15 14:28:01 +00001542
1543 ``parser.largs``
Georg Brandlb926ebb2009-09-17 17:14:04 +00001544 the current list of leftover arguments, ie. arguments that have been
1545 consumed but are neither options nor option arguments. Feel free to modify
1546 ``parser.largs``, e.g. by adding more arguments to it. (This list will
1547 become ``args``, the second return value of :meth:`parse_args`.)
Georg Brandl8ec7f652007-08-15 14:28:01 +00001548
1549 ``parser.rargs``
Georg Brandlb926ebb2009-09-17 17:14:04 +00001550 the current list of remaining arguments, ie. with ``opt_str`` and
1551 ``value`` (if applicable) removed, and only the arguments following them
1552 still there. Feel free to modify ``parser.rargs``, e.g. by consuming more
1553 arguments.
Georg Brandl8ec7f652007-08-15 14:28:01 +00001554
1555 ``parser.values``
1556 the object where option values are by default stored (an instance of
Georg Brandlb926ebb2009-09-17 17:14:04 +00001557 optparse.OptionValues). This lets callbacks use the same mechanism as the
1558 rest of :mod:`optparse` for storing option values; you don't need to mess
1559 around with globals or closures. You can also access or modify the
1560 value(s) of any options already encountered on the command-line.
Georg Brandl8ec7f652007-08-15 14:28:01 +00001561
1562``args``
Georg Brandlb926ebb2009-09-17 17:14:04 +00001563 is a tuple of arbitrary positional arguments supplied via the
1564 :attr:`~Option.callback_args` option attribute.
Georg Brandl8ec7f652007-08-15 14:28:01 +00001565
1566``kwargs``
Georg Brandlb926ebb2009-09-17 17:14:04 +00001567 is a dictionary of arbitrary keyword arguments supplied via
1568 :attr:`~Option.callback_kwargs`.
Georg Brandl8ec7f652007-08-15 14:28:01 +00001569
1570
1571.. _optparse-raising-errors-in-callback:
1572
1573Raising errors in a callback
1574^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1575
Georg Brandlb926ebb2009-09-17 17:14:04 +00001576The callback function should raise :exc:`OptionValueError` if there are any
1577problems with the option or its argument(s). :mod:`optparse` catches this and
1578terminates the program, printing the error message you supply to stderr. Your
1579message should be clear, concise, accurate, and mention the option at fault.
1580Otherwise, the user will have a hard time figuring out what he did wrong.
Georg Brandl8ec7f652007-08-15 14:28:01 +00001581
1582
1583.. _optparse-callback-example-1:
1584
1585Callback example 1: trivial callback
1586^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1587
1588Here's an example of a callback option that takes no arguments, and simply
1589records that the option was seen::
1590
1591 def record_foo_seen(option, opt_str, value, parser):
Georg Brandl253a29f2009-02-05 11:33:21 +00001592 parser.values.saw_foo = True
Georg Brandl8ec7f652007-08-15 14:28:01 +00001593
1594 parser.add_option("--foo", action="callback", callback=record_foo_seen)
1595
Georg Brandlb926ebb2009-09-17 17:14:04 +00001596Of course, you could do that with the ``"store_true"`` action.
Georg Brandl8ec7f652007-08-15 14:28:01 +00001597
1598
1599.. _optparse-callback-example-2:
1600
1601Callback example 2: check option order
1602^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1603
1604Here's a slightly more interesting example: record the fact that ``"-a"`` is
1605seen, but blow up if it comes after ``"-b"`` in the command-line. ::
1606
1607 def check_order(option, opt_str, value, parser):
1608 if parser.values.b:
1609 raise OptionValueError("can't use -a after -b")
1610 parser.values.a = 1
1611 [...]
1612 parser.add_option("-a", action="callback", callback=check_order)
1613 parser.add_option("-b", action="store_true", dest="b")
1614
1615
1616.. _optparse-callback-example-3:
1617
1618Callback example 3: check option order (generalized)
1619^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1620
1621If you want to re-use this callback for several similar options (set a flag, but
1622blow up if ``"-b"`` has already been seen), it needs a bit of work: the error
1623message and the flag that it sets must be generalized. ::
1624
1625 def check_order(option, opt_str, value, parser):
1626 if parser.values.b:
1627 raise OptionValueError("can't use %s after -b" % opt_str)
1628 setattr(parser.values, option.dest, 1)
1629 [...]
1630 parser.add_option("-a", action="callback", callback=check_order, dest='a')
1631 parser.add_option("-b", action="store_true", dest="b")
1632 parser.add_option("-c", action="callback", callback=check_order, dest='c')
1633
1634
1635.. _optparse-callback-example-4:
1636
1637Callback example 4: check arbitrary condition
1638^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1639
1640Of course, you could put any condition in there---you're not limited to checking
1641the values of already-defined options. For example, if you have options that
1642should not be called when the moon is full, all you have to do is this::
1643
1644 def check_moon(option, opt_str, value, parser):
1645 if is_moon_full():
1646 raise OptionValueError("%s option invalid when moon is full"
1647 % opt_str)
1648 setattr(parser.values, option.dest, 1)
1649 [...]
1650 parser.add_option("--foo",
1651 action="callback", callback=check_moon, dest="foo")
1652
1653(The definition of ``is_moon_full()`` is left as an exercise for the reader.)
1654
1655
1656.. _optparse-callback-example-5:
1657
1658Callback example 5: fixed arguments
1659^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1660
1661Things get slightly more interesting when you define callback options that take
1662a fixed number of arguments. Specifying that a callback option takes arguments
Georg Brandlb926ebb2009-09-17 17:14:04 +00001663is similar to defining a ``"store"`` or ``"append"`` option: if you define
1664:attr:`~Option.type`, then the option takes one argument that must be
1665convertible to that type; if you further define :attr:`~Option.nargs`, then the
1666option takes :attr:`~Option.nargs` arguments.
Georg Brandl8ec7f652007-08-15 14:28:01 +00001667
Georg Brandlb926ebb2009-09-17 17:14:04 +00001668Here's an example that just emulates the standard ``"store"`` action::
Georg Brandl8ec7f652007-08-15 14:28:01 +00001669
1670 def store_value(option, opt_str, value, parser):
1671 setattr(parser.values, option.dest, value)
1672 [...]
1673 parser.add_option("--foo",
1674 action="callback", callback=store_value,
1675 type="int", nargs=3, dest="foo")
1676
1677Note that :mod:`optparse` takes care of consuming 3 arguments and converting
1678them to integers for you; all you have to do is store them. (Or whatever;
1679obviously you don't need a callback for this example.)
1680
1681
1682.. _optparse-callback-example-6:
1683
1684Callback example 6: variable arguments
1685^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1686
1687Things get hairy when you want an option to take a variable number of arguments.
1688For this case, you must write a callback, as :mod:`optparse` doesn't provide any
1689built-in capabilities for it. And you have to deal with certain intricacies of
1690conventional Unix command-line parsing that :mod:`optparse` normally handles for
1691you. In particular, callbacks should implement the conventional rules for bare
1692``"--"`` and ``"-"`` arguments:
1693
1694* either ``"--"`` or ``"-"`` can be option arguments
1695
1696* bare ``"--"`` (if not the argument to some option): halt command-line
1697 processing and discard the ``"--"``
1698
1699* bare ``"-"`` (if not the argument to some option): halt command-line
1700 processing but keep the ``"-"`` (append it to ``parser.largs``)
1701
1702If you want an option that takes a variable number of arguments, there are
1703several subtle, tricky issues to worry about. The exact implementation you
1704choose will be based on which trade-offs you're willing to make for your
1705application (which is why :mod:`optparse` doesn't support this sort of thing
1706directly).
1707
1708Nevertheless, here's a stab at a callback for an option with variable
1709arguments::
1710
Georg Brandl60b2e382008-12-15 09:07:39 +00001711 def vararg_callback(option, opt_str, value, parser):
1712 assert value is None
1713 value = []
Georg Brandl8ec7f652007-08-15 14:28:01 +00001714
Georg Brandl60b2e382008-12-15 09:07:39 +00001715 def floatable(str):
1716 try:
1717 float(str)
1718 return True
1719 except ValueError:
1720 return False
Georg Brandl8ec7f652007-08-15 14:28:01 +00001721
Georg Brandl60b2e382008-12-15 09:07:39 +00001722 for arg in parser.rargs:
1723 # stop on --foo like options
1724 if arg[:2] == "--" and len(arg) > 2:
1725 break
1726 # stop on -a, but not on -3 or -3.0
1727 if arg[:1] == "-" and len(arg) > 1 and not floatable(arg):
1728 break
1729 value.append(arg)
1730
1731 del parser.rargs[:len(value)]
Georg Brandl174fbe72009-02-05 10:30:57 +00001732 setattr(parser.values, option.dest, value)
Georg Brandl8ec7f652007-08-15 14:28:01 +00001733
1734 [...]
Andrew M. Kuchling810f8072008-09-06 13:04:02 +00001735 parser.add_option("-c", "--callback", dest="vararg_attr",
Benjamin Petersonc8590942008-04-23 20:38:06 +00001736 action="callback", callback=vararg_callback)
Georg Brandl8ec7f652007-08-15 14:28:01 +00001737
Georg Brandl8ec7f652007-08-15 14:28:01 +00001738
1739.. _optparse-extending-optparse:
1740
1741Extending :mod:`optparse`
1742-------------------------
1743
1744Since the two major controlling factors in how :mod:`optparse` interprets
1745command-line options are the action and type of each option, the most likely
1746direction of extension is to add new actions and new types.
1747
1748
1749.. _optparse-adding-new-types:
1750
1751Adding new types
1752^^^^^^^^^^^^^^^^
1753
1754To add new types, you need to define your own subclass of :mod:`optparse`'s
Georg Brandlb926ebb2009-09-17 17:14:04 +00001755:class:`Option` class. This class has a couple of attributes that define
1756:mod:`optparse`'s types: :attr:`~Option.TYPES` and :attr:`~Option.TYPE_CHECKER`.
Georg Brandl8ec7f652007-08-15 14:28:01 +00001757
Georg Brandlb926ebb2009-09-17 17:14:04 +00001758.. attribute:: Option.TYPES
Georg Brandl8ec7f652007-08-15 14:28:01 +00001759
Georg Brandlb926ebb2009-09-17 17:14:04 +00001760 A tuple of type names; in your subclass, simply define a new tuple
1761 :attr:`TYPES` that builds on the standard one.
Georg Brandl8ec7f652007-08-15 14:28:01 +00001762
Georg Brandlb926ebb2009-09-17 17:14:04 +00001763.. attribute:: Option.TYPE_CHECKER
Georg Brandl8ec7f652007-08-15 14:28:01 +00001764
Georg Brandlb926ebb2009-09-17 17:14:04 +00001765 A dictionary mapping type names to type-checking functions. A type-checking
1766 function has the following signature::
Georg Brandl8ec7f652007-08-15 14:28:01 +00001767
Georg Brandlb926ebb2009-09-17 17:14:04 +00001768 def check_mytype(option, opt, value)
Georg Brandl8ec7f652007-08-15 14:28:01 +00001769
Georg Brandlb926ebb2009-09-17 17:14:04 +00001770 where ``option`` is an :class:`Option` instance, ``opt`` is an option string
1771 (e.g., ``"-f"``), and ``value`` is the string from the command line that must
1772 be checked and converted to your desired type. ``check_mytype()`` should
1773 return an object of the hypothetical type ``mytype``. The value returned by
1774 a type-checking function will wind up in the OptionValues instance returned
1775 by :meth:`OptionParser.parse_args`, or be passed to a callback as the
1776 ``value`` parameter.
1777
1778 Your type-checking function should raise :exc:`OptionValueError` if it
1779 encounters any problems. :exc:`OptionValueError` takes a single string
1780 argument, which is passed as-is to :class:`OptionParser`'s :meth:`error`
1781 method, which in turn prepends the program name and the string ``"error:"``
1782 and prints everything to stderr before terminating the process.
1783
1784Here's a silly example that demonstrates adding a ``"complex"`` option type to
Georg Brandl8ec7f652007-08-15 14:28:01 +00001785parse Python-style complex numbers on the command line. (This is even sillier
1786than it used to be, because :mod:`optparse` 1.3 added built-in support for
1787complex numbers, but never mind.)
1788
1789First, the necessary imports::
1790
1791 from copy import copy
1792 from optparse import Option, OptionValueError
1793
1794You need to define your type-checker first, since it's referred to later (in the
Georg Brandlb926ebb2009-09-17 17:14:04 +00001795:attr:`~Option.TYPE_CHECKER` class attribute of your Option subclass)::
Georg Brandl8ec7f652007-08-15 14:28:01 +00001796
1797 def check_complex(option, opt, value):
1798 try:
1799 return complex(value)
1800 except ValueError:
1801 raise OptionValueError(
1802 "option %s: invalid complex value: %r" % (opt, value))
1803
1804Finally, the Option subclass::
1805
1806 class MyOption (Option):
1807 TYPES = Option.TYPES + ("complex",)
1808 TYPE_CHECKER = copy(Option.TYPE_CHECKER)
1809 TYPE_CHECKER["complex"] = check_complex
1810
1811(If we didn't make a :func:`copy` of :attr:`Option.TYPE_CHECKER`, we would end
Georg Brandlb926ebb2009-09-17 17:14:04 +00001812up modifying the :attr:`~Option.TYPE_CHECKER` attribute of :mod:`optparse`'s
1813Option class. This being Python, nothing stops you from doing that except good
1814manners and common sense.)
Georg Brandl8ec7f652007-08-15 14:28:01 +00001815
1816That's it! Now you can write a script that uses the new option type just like
1817any other :mod:`optparse`\ -based script, except you have to instruct your
1818OptionParser to use MyOption instead of Option::
1819
1820 parser = OptionParser(option_class=MyOption)
1821 parser.add_option("-c", type="complex")
1822
1823Alternately, you can build your own option list and pass it to OptionParser; if
1824you don't use :meth:`add_option` in the above way, you don't need to tell
1825OptionParser which option class to use::
1826
1827 option_list = [MyOption("-c", action="store", type="complex", dest="c")]
1828 parser = OptionParser(option_list=option_list)
1829
1830
1831.. _optparse-adding-new-actions:
1832
1833Adding new actions
1834^^^^^^^^^^^^^^^^^^
1835
1836Adding new actions is a bit trickier, because you have to understand that
1837:mod:`optparse` has a couple of classifications for actions:
1838
1839"store" actions
1840 actions that result in :mod:`optparse` storing a value to an attribute of the
Georg Brandlb926ebb2009-09-17 17:14:04 +00001841 current OptionValues instance; these options require a :attr:`~Option.dest`
1842 attribute to be supplied to the Option constructor.
Georg Brandl8ec7f652007-08-15 14:28:01 +00001843
1844"typed" actions
Georg Brandlb926ebb2009-09-17 17:14:04 +00001845 actions that take a value from the command line and expect it to be of a
1846 certain type; or rather, a string that can be converted to a certain type.
1847 These options require a :attr:`~Option.type` attribute to the Option
1848 constructor.
Georg Brandl8ec7f652007-08-15 14:28:01 +00001849
Georg Brandlb926ebb2009-09-17 17:14:04 +00001850These are overlapping sets: some default "store" actions are ``"store"``,
1851``"store_const"``, ``"append"``, and ``"count"``, while the default "typed"
1852actions are ``"store"``, ``"append"``, and ``"callback"``.
Georg Brandl8ec7f652007-08-15 14:28:01 +00001853
1854When you add an action, you need to categorize it by listing it in at least one
1855of the following class attributes of Option (all are lists of strings):
1856
Georg Brandlb926ebb2009-09-17 17:14:04 +00001857.. attribute:: Option.ACTIONS
Georg Brandl8ec7f652007-08-15 14:28:01 +00001858
Georg Brandlb926ebb2009-09-17 17:14:04 +00001859 All actions must be listed in ACTIONS.
Georg Brandl8ec7f652007-08-15 14:28:01 +00001860
Georg Brandlb926ebb2009-09-17 17:14:04 +00001861.. attribute:: Option.STORE_ACTIONS
Georg Brandl8ec7f652007-08-15 14:28:01 +00001862
Georg Brandlb926ebb2009-09-17 17:14:04 +00001863 "store" actions are additionally listed here.
1864
1865.. attribute:: Option.TYPED_ACTIONS
1866
1867 "typed" actions are additionally listed here.
1868
1869.. attribute:: Option.ALWAYS_TYPED_ACTIONS
1870
1871 Actions that always take a type (i.e. whose options always take a value) are
Georg Brandl8ec7f652007-08-15 14:28:01 +00001872 additionally listed here. The only effect of this is that :mod:`optparse`
Georg Brandlb926ebb2009-09-17 17:14:04 +00001873 assigns the default type, ``"string"``, to options with no explicit type
1874 whose action is listed in :attr:`ALWAYS_TYPED_ACTIONS`.
Georg Brandl8ec7f652007-08-15 14:28:01 +00001875
1876In order to actually implement your new action, you must override Option's
1877:meth:`take_action` method and add a case that recognizes your action.
1878
Georg Brandlb926ebb2009-09-17 17:14:04 +00001879For example, let's add an ``"extend"`` action. This is similar to the standard
1880``"append"`` action, but instead of taking a single value from the command-line
1881and appending it to an existing list, ``"extend"`` will take multiple values in
1882a single comma-delimited string, and extend an existing list with them. That
1883is, if ``"--names"`` is an ``"extend"`` option of type ``"string"``, the command
1884line ::
Georg Brandl8ec7f652007-08-15 14:28:01 +00001885
1886 --names=foo,bar --names blah --names ding,dong
1887
1888would result in a list ::
1889
1890 ["foo", "bar", "blah", "ding", "dong"]
1891
1892Again we define a subclass of Option::
1893
Ezio Melotti5129ed32010-01-03 09:01:27 +00001894 class MyOption(Option):
Georg Brandl8ec7f652007-08-15 14:28:01 +00001895
1896 ACTIONS = Option.ACTIONS + ("extend",)
1897 STORE_ACTIONS = Option.STORE_ACTIONS + ("extend",)
1898 TYPED_ACTIONS = Option.TYPED_ACTIONS + ("extend",)
1899 ALWAYS_TYPED_ACTIONS = Option.ALWAYS_TYPED_ACTIONS + ("extend",)
1900
1901 def take_action(self, action, dest, opt, value, values, parser):
1902 if action == "extend":
1903 lvalue = value.split(",")
1904 values.ensure_value(dest, []).extend(lvalue)
1905 else:
1906 Option.take_action(
1907 self, action, dest, opt, value, values, parser)
1908
1909Features of note:
1910
Georg Brandlb926ebb2009-09-17 17:14:04 +00001911* ``"extend"`` both expects a value on the command-line and stores that value
1912 somewhere, so it goes in both :attr:`~Option.STORE_ACTIONS` and
1913 :attr:`~Option.TYPED_ACTIONS`.
Georg Brandl8ec7f652007-08-15 14:28:01 +00001914
Georg Brandlb926ebb2009-09-17 17:14:04 +00001915* to ensure that :mod:`optparse` assigns the default type of ``"string"`` to
1916 ``"extend"`` actions, we put the ``"extend"`` action in
1917 :attr:`~Option.ALWAYS_TYPED_ACTIONS` as well.
Georg Brandl8ec7f652007-08-15 14:28:01 +00001918
1919* :meth:`MyOption.take_action` implements just this one new action, and passes
1920 control back to :meth:`Option.take_action` for the standard :mod:`optparse`
Georg Brandlb926ebb2009-09-17 17:14:04 +00001921 actions.
Georg Brandl8ec7f652007-08-15 14:28:01 +00001922
Georg Brandlb926ebb2009-09-17 17:14:04 +00001923* ``values`` is an instance of the optparse_parser.Values class, which provides
1924 the very useful :meth:`ensure_value` method. :meth:`ensure_value` is
1925 essentially :func:`getattr` with a safety valve; it is called as ::
Georg Brandl8ec7f652007-08-15 14:28:01 +00001926
1927 values.ensure_value(attr, value)
1928
1929 If the ``attr`` attribute of ``values`` doesn't exist or is None, then
Georg Brandlb926ebb2009-09-17 17:14:04 +00001930 ensure_value() first sets it to ``value``, and then returns 'value. This is
1931 very handy for actions like ``"extend"``, ``"append"``, and ``"count"``, all
1932 of which accumulate data in a variable and expect that variable to be of a
1933 certain type (a list for the first two, an integer for the latter). Using
Georg Brandl8ec7f652007-08-15 14:28:01 +00001934 :meth:`ensure_value` means that scripts using your action don't have to worry
Georg Brandlb926ebb2009-09-17 17:14:04 +00001935 about setting a default value for the option destinations in question; they
1936 can just leave the default as None and :meth:`ensure_value` will take care of
Georg Brandl8ec7f652007-08-15 14:28:01 +00001937 getting it right when it's needed.