17db96d56Sopenharmony_ci:mod:`optparse` --- Parser for command line options
27db96d56Sopenharmony_ci===================================================
37db96d56Sopenharmony_ci
47db96d56Sopenharmony_ci.. module:: optparse
57db96d56Sopenharmony_ci   :synopsis: Command-line option parsing library.
67db96d56Sopenharmony_ci   :deprecated:
77db96d56Sopenharmony_ci
87db96d56Sopenharmony_ci.. moduleauthor:: Greg Ward <gward@python.net>
97db96d56Sopenharmony_ci.. sectionauthor:: Greg Ward <gward@python.net>
107db96d56Sopenharmony_ci
117db96d56Sopenharmony_ci**Source code:** :source:`Lib/optparse.py`
127db96d56Sopenharmony_ci
137db96d56Sopenharmony_ci.. deprecated:: 3.2
147db96d56Sopenharmony_ci   The :mod:`optparse` module is deprecated and will not be developed further;
157db96d56Sopenharmony_ci   development will continue with the :mod:`argparse` module.
167db96d56Sopenharmony_ci
177db96d56Sopenharmony_ci--------------
187db96d56Sopenharmony_ci
197db96d56Sopenharmony_ci:mod:`optparse` is a more convenient, flexible, and powerful library for parsing
207db96d56Sopenharmony_cicommand-line options than the old :mod:`getopt` module.  :mod:`optparse` uses a
217db96d56Sopenharmony_cimore declarative style of command-line parsing: you create an instance of
227db96d56Sopenharmony_ci:class:`OptionParser`, populate it with options, and parse the command
237db96d56Sopenharmony_ciline. :mod:`optparse` allows users to specify options in the conventional
247db96d56Sopenharmony_ciGNU/POSIX syntax, and additionally generates usage and help messages for you.
257db96d56Sopenharmony_ci
267db96d56Sopenharmony_ciHere's an example of using :mod:`optparse` in a simple script::
277db96d56Sopenharmony_ci
287db96d56Sopenharmony_ci   from optparse import OptionParser
297db96d56Sopenharmony_ci   ...
307db96d56Sopenharmony_ci   parser = OptionParser()
317db96d56Sopenharmony_ci   parser.add_option("-f", "--file", dest="filename",
327db96d56Sopenharmony_ci                     help="write report to FILE", metavar="FILE")
337db96d56Sopenharmony_ci   parser.add_option("-q", "--quiet",
347db96d56Sopenharmony_ci                     action="store_false", dest="verbose", default=True,
357db96d56Sopenharmony_ci                     help="don't print status messages to stdout")
367db96d56Sopenharmony_ci
377db96d56Sopenharmony_ci   (options, args) = parser.parse_args()
387db96d56Sopenharmony_ci
397db96d56Sopenharmony_ciWith these few lines of code, users of your script can now do the "usual thing"
407db96d56Sopenharmony_cion the command-line, for example::
417db96d56Sopenharmony_ci
427db96d56Sopenharmony_ci   <yourscript> --file=outfile -q
437db96d56Sopenharmony_ci
447db96d56Sopenharmony_ciAs it parses the command line, :mod:`optparse` sets attributes of the
457db96d56Sopenharmony_ci``options`` object returned by :meth:`parse_args` based on user-supplied
467db96d56Sopenharmony_cicommand-line values.  When :meth:`parse_args` returns from parsing this command
477db96d56Sopenharmony_ciline, ``options.filename`` will be ``"outfile"`` and ``options.verbose`` will be
487db96d56Sopenharmony_ci``False``.  :mod:`optparse` supports both long and short options, allows short
497db96d56Sopenharmony_cioptions to be merged together, and allows options to be associated with their
507db96d56Sopenharmony_ciarguments in a variety of ways.  Thus, the following command lines are all
517db96d56Sopenharmony_ciequivalent to the above example::
527db96d56Sopenharmony_ci
537db96d56Sopenharmony_ci   <yourscript> -f outfile --quiet
547db96d56Sopenharmony_ci   <yourscript> --quiet --file outfile
557db96d56Sopenharmony_ci   <yourscript> -q -foutfile
567db96d56Sopenharmony_ci   <yourscript> -qfoutfile
577db96d56Sopenharmony_ci
587db96d56Sopenharmony_ciAdditionally, users can run one of the following ::
597db96d56Sopenharmony_ci
607db96d56Sopenharmony_ci   <yourscript> -h
617db96d56Sopenharmony_ci   <yourscript> --help
627db96d56Sopenharmony_ci
637db96d56Sopenharmony_ciand :mod:`optparse` will print out a brief summary of your script's options:
647db96d56Sopenharmony_ci
657db96d56Sopenharmony_ci.. code-block:: text
667db96d56Sopenharmony_ci
677db96d56Sopenharmony_ci   Usage: <yourscript> [options]
687db96d56Sopenharmony_ci
697db96d56Sopenharmony_ci   Options:
707db96d56Sopenharmony_ci     -h, --help            show this help message and exit
717db96d56Sopenharmony_ci     -f FILE, --file=FILE  write report to FILE
727db96d56Sopenharmony_ci     -q, --quiet           don't print status messages to stdout
737db96d56Sopenharmony_ci
747db96d56Sopenharmony_ciwhere the value of *yourscript* is determined at runtime (normally from
757db96d56Sopenharmony_ci``sys.argv[0]``).
767db96d56Sopenharmony_ci
777db96d56Sopenharmony_ci
787db96d56Sopenharmony_ci.. _optparse-background:
797db96d56Sopenharmony_ci
807db96d56Sopenharmony_ciBackground
817db96d56Sopenharmony_ci----------
827db96d56Sopenharmony_ci
837db96d56Sopenharmony_ci:mod:`optparse` was explicitly designed to encourage the creation of programs
847db96d56Sopenharmony_ciwith straightforward, conventional command-line interfaces.  To that end, it
857db96d56Sopenharmony_cisupports only the most common command-line syntax and semantics conventionally
867db96d56Sopenharmony_ciused under Unix.  If you are unfamiliar with these conventions, read this
877db96d56Sopenharmony_cisection to acquaint yourself with them.
887db96d56Sopenharmony_ci
897db96d56Sopenharmony_ci
907db96d56Sopenharmony_ci.. _optparse-terminology:
917db96d56Sopenharmony_ci
927db96d56Sopenharmony_ciTerminology
937db96d56Sopenharmony_ci^^^^^^^^^^^
947db96d56Sopenharmony_ci
957db96d56Sopenharmony_ciargument
967db96d56Sopenharmony_ci   a string entered on the command-line, and passed by the shell to ``execl()``
977db96d56Sopenharmony_ci   or ``execv()``.  In Python, arguments are elements of ``sys.argv[1:]``
987db96d56Sopenharmony_ci   (``sys.argv[0]`` is the name of the program being executed).  Unix shells
997db96d56Sopenharmony_ci   also use the term "word".
1007db96d56Sopenharmony_ci
1017db96d56Sopenharmony_ci   It is occasionally desirable to substitute an argument list other than
1027db96d56Sopenharmony_ci   ``sys.argv[1:]``, so you should read "argument" as "an element of
1037db96d56Sopenharmony_ci   ``sys.argv[1:]``, or of some other list provided as a substitute for
1047db96d56Sopenharmony_ci   ``sys.argv[1:]``".
1057db96d56Sopenharmony_ci
1067db96d56Sopenharmony_cioption
1077db96d56Sopenharmony_ci   an argument used to supply extra information to guide or customize the
1087db96d56Sopenharmony_ci   execution of a program.  There are many different syntaxes for options; the
1097db96d56Sopenharmony_ci   traditional Unix syntax is a hyphen ("-") followed by a single letter,
1107db96d56Sopenharmony_ci   e.g. ``-x`` or ``-F``.  Also, traditional Unix syntax allows multiple
1117db96d56Sopenharmony_ci   options to be merged into a single argument, e.g. ``-x -F`` is equivalent
1127db96d56Sopenharmony_ci   to ``-xF``.  The GNU project introduced ``--`` followed by a series of
1137db96d56Sopenharmony_ci   hyphen-separated words, e.g. ``--file`` or ``--dry-run``.  These are the
1147db96d56Sopenharmony_ci   only two option syntaxes provided by :mod:`optparse`.
1157db96d56Sopenharmony_ci
1167db96d56Sopenharmony_ci   Some other option syntaxes that the world has seen include:
1177db96d56Sopenharmony_ci
1187db96d56Sopenharmony_ci   * a hyphen followed by a few letters, e.g. ``-pf`` (this is *not* the same
1197db96d56Sopenharmony_ci     as multiple options merged into a single argument)
1207db96d56Sopenharmony_ci
1217db96d56Sopenharmony_ci   * a hyphen followed by a whole word, e.g. ``-file`` (this is technically
1227db96d56Sopenharmony_ci     equivalent to the previous syntax, but they aren't usually seen in the same
1237db96d56Sopenharmony_ci     program)
1247db96d56Sopenharmony_ci
1257db96d56Sopenharmony_ci   * a plus sign followed by a single letter, or a few letters, or a word, e.g.
1267db96d56Sopenharmony_ci     ``+f``, ``+rgb``
1277db96d56Sopenharmony_ci
1287db96d56Sopenharmony_ci   * a slash followed by a letter, or a few letters, or a word, e.g. ``/f``,
1297db96d56Sopenharmony_ci     ``/file``
1307db96d56Sopenharmony_ci
1317db96d56Sopenharmony_ci   These option syntaxes are not supported by :mod:`optparse`, and they never
1327db96d56Sopenharmony_ci   will be.  This is deliberate: the first three are non-standard on any
1337db96d56Sopenharmony_ci   environment, and the last only makes sense if you're exclusively targeting
1347db96d56Sopenharmony_ci   Windows or certain legacy platforms (e.g. VMS, MS-DOS).
1357db96d56Sopenharmony_ci
1367db96d56Sopenharmony_cioption argument
1377db96d56Sopenharmony_ci   an argument that follows an option, is closely associated with that option,
1387db96d56Sopenharmony_ci   and is consumed from the argument list when that option is. With
1397db96d56Sopenharmony_ci   :mod:`optparse`, option arguments may either be in a separate argument from
1407db96d56Sopenharmony_ci   their option:
1417db96d56Sopenharmony_ci
1427db96d56Sopenharmony_ci   .. code-block:: text
1437db96d56Sopenharmony_ci
1447db96d56Sopenharmony_ci      -f foo
1457db96d56Sopenharmony_ci      --file foo
1467db96d56Sopenharmony_ci
1477db96d56Sopenharmony_ci   or included in the same argument:
1487db96d56Sopenharmony_ci
1497db96d56Sopenharmony_ci   .. code-block:: text
1507db96d56Sopenharmony_ci
1517db96d56Sopenharmony_ci      -ffoo
1527db96d56Sopenharmony_ci      --file=foo
1537db96d56Sopenharmony_ci
1547db96d56Sopenharmony_ci   Typically, a given option either takes an argument or it doesn't. Lots of
1557db96d56Sopenharmony_ci   people want an "optional option arguments" feature, meaning that some options
1567db96d56Sopenharmony_ci   will take an argument if they see it, and won't if they don't.  This is
1577db96d56Sopenharmony_ci   somewhat controversial, because it makes parsing ambiguous: if ``-a`` takes
1587db96d56Sopenharmony_ci   an optional argument and ``-b`` is another option entirely, how do we
1597db96d56Sopenharmony_ci   interpret ``-ab``?  Because of this ambiguity, :mod:`optparse` does not
1607db96d56Sopenharmony_ci   support this feature.
1617db96d56Sopenharmony_ci
1627db96d56Sopenharmony_cipositional argument
1637db96d56Sopenharmony_ci   something leftover in the argument list after options have been parsed, i.e.
1647db96d56Sopenharmony_ci   after options and their arguments have been parsed and removed from the
1657db96d56Sopenharmony_ci   argument list.
1667db96d56Sopenharmony_ci
1677db96d56Sopenharmony_cirequired option
1687db96d56Sopenharmony_ci   an option that must be supplied on the command-line; note that the phrase
1697db96d56Sopenharmony_ci   "required option" is self-contradictory in English.  :mod:`optparse` doesn't
1707db96d56Sopenharmony_ci   prevent you from implementing required options, but doesn't give you much
1717db96d56Sopenharmony_ci   help at it either.
1727db96d56Sopenharmony_ci
1737db96d56Sopenharmony_ciFor example, consider this hypothetical command-line::
1747db96d56Sopenharmony_ci
1757db96d56Sopenharmony_ci   prog -v --report report.txt foo bar
1767db96d56Sopenharmony_ci
1777db96d56Sopenharmony_ci``-v`` and ``--report`` are both options.  Assuming that ``--report``
1787db96d56Sopenharmony_citakes one argument, ``report.txt`` is an option argument.  ``foo`` and
1797db96d56Sopenharmony_ci``bar`` are positional arguments.
1807db96d56Sopenharmony_ci
1817db96d56Sopenharmony_ci
1827db96d56Sopenharmony_ci.. _optparse-what-options-for:
1837db96d56Sopenharmony_ci
1847db96d56Sopenharmony_ciWhat are options for?
1857db96d56Sopenharmony_ci^^^^^^^^^^^^^^^^^^^^^
1867db96d56Sopenharmony_ci
1877db96d56Sopenharmony_ciOptions are used to provide extra information to tune or customize the execution
1887db96d56Sopenharmony_ciof a program.  In case it wasn't clear, options are usually *optional*.  A
1897db96d56Sopenharmony_ciprogram should be able to run just fine with no options whatsoever.  (Pick a
1907db96d56Sopenharmony_cirandom program from the Unix or GNU toolsets.  Can it run without any options at
1917db96d56Sopenharmony_ciall and still make sense?  The main exceptions are ``find``, ``tar``, and
1927db96d56Sopenharmony_ci``dd``\ ---all of which are mutant oddballs that have been rightly criticized
1937db96d56Sopenharmony_cifor their non-standard syntax and confusing interfaces.)
1947db96d56Sopenharmony_ci
1957db96d56Sopenharmony_ciLots of people want their programs to have "required options".  Think about it.
1967db96d56Sopenharmony_ciIf it's required, then it's *not optional*!  If there is a piece of information
1977db96d56Sopenharmony_cithat your program absolutely requires in order to run successfully, that's what
1987db96d56Sopenharmony_cipositional arguments are for.
1997db96d56Sopenharmony_ci
2007db96d56Sopenharmony_ciAs an example of good command-line interface design, consider the humble ``cp``
2017db96d56Sopenharmony_ciutility, for copying files.  It doesn't make much sense to try to copy files
2027db96d56Sopenharmony_ciwithout supplying a destination and at least one source. Hence, ``cp`` fails if
2037db96d56Sopenharmony_ciyou run it with no arguments.  However, it has a flexible, useful syntax that
2047db96d56Sopenharmony_cidoes not require any options at all::
2057db96d56Sopenharmony_ci
2067db96d56Sopenharmony_ci   cp SOURCE DEST
2077db96d56Sopenharmony_ci   cp SOURCE ... DEST-DIR
2087db96d56Sopenharmony_ci
2097db96d56Sopenharmony_ciYou can get pretty far with just that.  Most ``cp`` implementations provide a
2107db96d56Sopenharmony_cibunch of options to tweak exactly how the files are copied: you can preserve
2117db96d56Sopenharmony_cimode and modification time, avoid following symlinks, ask before clobbering
2127db96d56Sopenharmony_ciexisting files, etc.  But none of this distracts from the core mission of
2137db96d56Sopenharmony_ci``cp``, which is to copy either one file to another, or several files to another
2147db96d56Sopenharmony_cidirectory.
2157db96d56Sopenharmony_ci
2167db96d56Sopenharmony_ci
2177db96d56Sopenharmony_ci.. _optparse-what-positional-arguments-for:
2187db96d56Sopenharmony_ci
2197db96d56Sopenharmony_ciWhat are positional arguments for?
2207db96d56Sopenharmony_ci^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2217db96d56Sopenharmony_ci
2227db96d56Sopenharmony_ciPositional arguments are for those pieces of information that your program
2237db96d56Sopenharmony_ciabsolutely, positively requires to run.
2247db96d56Sopenharmony_ci
2257db96d56Sopenharmony_ciA good user interface should have as few absolute requirements as possible.  If
2267db96d56Sopenharmony_ciyour program requires 17 distinct pieces of information in order to run
2277db96d56Sopenharmony_cisuccessfully, it doesn't much matter *how* you get that information from the
2287db96d56Sopenharmony_ciuser---most people will give up and walk away before they successfully run the
2297db96d56Sopenharmony_ciprogram.  This applies whether the user interface is a command-line, a
2307db96d56Sopenharmony_ciconfiguration file, or a GUI: if you make that many demands on your users, most
2317db96d56Sopenharmony_ciof them will simply give up.
2327db96d56Sopenharmony_ci
2337db96d56Sopenharmony_ciIn short, try to minimize the amount of information that users are absolutely
2347db96d56Sopenharmony_cirequired to supply---use sensible defaults whenever possible.  Of course, you
2357db96d56Sopenharmony_cialso want to make your programs reasonably flexible.  That's what options are
2367db96d56Sopenharmony_cifor.  Again, it doesn't matter if they are entries in a config file, widgets in
2377db96d56Sopenharmony_cithe "Preferences" dialog of a GUI, or command-line options---the more options
2387db96d56Sopenharmony_ciyou implement, the more flexible your program is, and the more complicated its
2397db96d56Sopenharmony_ciimplementation becomes.  Too much flexibility has drawbacks as well, of course;
2407db96d56Sopenharmony_citoo many options can overwhelm users and make your code much harder to maintain.
2417db96d56Sopenharmony_ci
2427db96d56Sopenharmony_ci
2437db96d56Sopenharmony_ci.. _optparse-tutorial:
2447db96d56Sopenharmony_ci
2457db96d56Sopenharmony_ciTutorial
2467db96d56Sopenharmony_ci--------
2477db96d56Sopenharmony_ci
2487db96d56Sopenharmony_ciWhile :mod:`optparse` is quite flexible and powerful, it's also straightforward
2497db96d56Sopenharmony_cito use in most cases.  This section covers the code patterns that are common to
2507db96d56Sopenharmony_ciany :mod:`optparse`\ -based program.
2517db96d56Sopenharmony_ci
2527db96d56Sopenharmony_ciFirst, you need to import the OptionParser class; then, early in the main
2537db96d56Sopenharmony_ciprogram, create an OptionParser instance::
2547db96d56Sopenharmony_ci
2557db96d56Sopenharmony_ci   from optparse import OptionParser
2567db96d56Sopenharmony_ci   ...
2577db96d56Sopenharmony_ci   parser = OptionParser()
2587db96d56Sopenharmony_ci
2597db96d56Sopenharmony_ciThen you can start defining options.  The basic syntax is::
2607db96d56Sopenharmony_ci
2617db96d56Sopenharmony_ci   parser.add_option(opt_str, ...,
2627db96d56Sopenharmony_ci                     attr=value, ...)
2637db96d56Sopenharmony_ci
2647db96d56Sopenharmony_ciEach option has one or more option strings, such as ``-f`` or ``--file``,
2657db96d56Sopenharmony_ciand several option attributes that tell :mod:`optparse` what to expect and what
2667db96d56Sopenharmony_cito do when it encounters that option on the command line.
2677db96d56Sopenharmony_ci
2687db96d56Sopenharmony_ciTypically, each option will have one short option string and one long option
2697db96d56Sopenharmony_cistring, e.g.::
2707db96d56Sopenharmony_ci
2717db96d56Sopenharmony_ci   parser.add_option("-f", "--file", ...)
2727db96d56Sopenharmony_ci
2737db96d56Sopenharmony_ciYou're free to define as many short option strings and as many long option
2747db96d56Sopenharmony_cistrings as you like (including zero), as long as there is at least one option
2757db96d56Sopenharmony_cistring overall.
2767db96d56Sopenharmony_ci
2777db96d56Sopenharmony_ciThe option strings passed to :meth:`OptionParser.add_option` are effectively
2787db96d56Sopenharmony_cilabels for the
2797db96d56Sopenharmony_cioption defined by that call.  For brevity, we will frequently refer to
2807db96d56Sopenharmony_ci*encountering an option* on the command line; in reality, :mod:`optparse`
2817db96d56Sopenharmony_ciencounters *option strings* and looks up options from them.
2827db96d56Sopenharmony_ci
2837db96d56Sopenharmony_ciOnce all of your options are defined, instruct :mod:`optparse` to parse your
2847db96d56Sopenharmony_ciprogram's command line::
2857db96d56Sopenharmony_ci
2867db96d56Sopenharmony_ci   (options, args) = parser.parse_args()
2877db96d56Sopenharmony_ci
2887db96d56Sopenharmony_ci(If you like, you can pass a custom argument list to :meth:`parse_args`, but
2897db96d56Sopenharmony_cithat's rarely necessary: by default it uses ``sys.argv[1:]``.)
2907db96d56Sopenharmony_ci
2917db96d56Sopenharmony_ci:meth:`parse_args` returns two values:
2927db96d56Sopenharmony_ci
2937db96d56Sopenharmony_ci* ``options``, an object containing values for all of your options---e.g. if
2947db96d56Sopenharmony_ci  ``--file`` takes a single string argument, then ``options.file`` will be the
2957db96d56Sopenharmony_ci  filename supplied by the user, or ``None`` if the user did not supply that
2967db96d56Sopenharmony_ci  option
2977db96d56Sopenharmony_ci
2987db96d56Sopenharmony_ci* ``args``, the list of positional arguments leftover after parsing options
2997db96d56Sopenharmony_ci
3007db96d56Sopenharmony_ciThis tutorial section only covers the four most important option attributes:
3017db96d56Sopenharmony_ci:attr:`~Option.action`, :attr:`~Option.type`, :attr:`~Option.dest`
3027db96d56Sopenharmony_ci(destination), and :attr:`~Option.help`. Of these, :attr:`~Option.action` is the
3037db96d56Sopenharmony_cimost fundamental.
3047db96d56Sopenharmony_ci
3057db96d56Sopenharmony_ci
3067db96d56Sopenharmony_ci.. _optparse-understanding-option-actions:
3077db96d56Sopenharmony_ci
3087db96d56Sopenharmony_ciUnderstanding option actions
3097db96d56Sopenharmony_ci^^^^^^^^^^^^^^^^^^^^^^^^^^^^
3107db96d56Sopenharmony_ci
3117db96d56Sopenharmony_ciActions tell :mod:`optparse` what to do when it encounters an option on the
3127db96d56Sopenharmony_cicommand line.  There is a fixed set of actions hard-coded into :mod:`optparse`;
3137db96d56Sopenharmony_ciadding new actions is an advanced topic covered in section
3147db96d56Sopenharmony_ci:ref:`optparse-extending-optparse`.  Most actions tell :mod:`optparse` to store
3157db96d56Sopenharmony_cia value in some variable---for example, take a string from the command line and
3167db96d56Sopenharmony_cistore it in an attribute of ``options``.
3177db96d56Sopenharmony_ci
3187db96d56Sopenharmony_ciIf you don't specify an option action, :mod:`optparse` defaults to ``store``.
3197db96d56Sopenharmony_ci
3207db96d56Sopenharmony_ci
3217db96d56Sopenharmony_ci.. _optparse-store-action:
3227db96d56Sopenharmony_ci
3237db96d56Sopenharmony_ciThe store action
3247db96d56Sopenharmony_ci^^^^^^^^^^^^^^^^
3257db96d56Sopenharmony_ci
3267db96d56Sopenharmony_ciThe most common option action is ``store``, which tells :mod:`optparse` to take
3277db96d56Sopenharmony_cithe next argument (or the remainder of the current argument), ensure that it is
3287db96d56Sopenharmony_ciof the correct type, and store it to your chosen destination.
3297db96d56Sopenharmony_ci
3307db96d56Sopenharmony_ciFor example::
3317db96d56Sopenharmony_ci
3327db96d56Sopenharmony_ci   parser.add_option("-f", "--file",
3337db96d56Sopenharmony_ci                     action="store", type="string", dest="filename")
3347db96d56Sopenharmony_ci
3357db96d56Sopenharmony_ciNow let's make up a fake command line and ask :mod:`optparse` to parse it::
3367db96d56Sopenharmony_ci
3377db96d56Sopenharmony_ci   args = ["-f", "foo.txt"]
3387db96d56Sopenharmony_ci   (options, args) = parser.parse_args(args)
3397db96d56Sopenharmony_ci
3407db96d56Sopenharmony_ciWhen :mod:`optparse` sees the option string ``-f``, it consumes the next
3417db96d56Sopenharmony_ciargument, ``foo.txt``, and stores it in ``options.filename``.  So, after this
3427db96d56Sopenharmony_cicall to :meth:`parse_args`, ``options.filename`` is ``"foo.txt"``.
3437db96d56Sopenharmony_ci
3447db96d56Sopenharmony_ciSome other option types supported by :mod:`optparse` are ``int`` and ``float``.
3457db96d56Sopenharmony_ciHere's an option that expects an integer argument::
3467db96d56Sopenharmony_ci
3477db96d56Sopenharmony_ci   parser.add_option("-n", type="int", dest="num")
3487db96d56Sopenharmony_ci
3497db96d56Sopenharmony_ciNote that this option has no long option string, which is perfectly acceptable.
3507db96d56Sopenharmony_ciAlso, there's no explicit action, since the default is ``store``.
3517db96d56Sopenharmony_ci
3527db96d56Sopenharmony_ciLet's parse another fake command-line.  This time, we'll jam the option argument
3537db96d56Sopenharmony_ciright up against the option: since ``-n42`` (one argument) is equivalent to
3547db96d56Sopenharmony_ci``-n 42`` (two arguments), the code ::
3557db96d56Sopenharmony_ci
3567db96d56Sopenharmony_ci   (options, args) = parser.parse_args(["-n42"])
3577db96d56Sopenharmony_ci   print(options.num)
3587db96d56Sopenharmony_ci
3597db96d56Sopenharmony_ciwill print ``42``.
3607db96d56Sopenharmony_ci
3617db96d56Sopenharmony_ciIf you don't specify a type, :mod:`optparse` assumes ``string``.  Combined with
3627db96d56Sopenharmony_cithe fact that the default action is ``store``, that means our first example can
3637db96d56Sopenharmony_cibe a lot shorter::
3647db96d56Sopenharmony_ci
3657db96d56Sopenharmony_ci   parser.add_option("-f", "--file", dest="filename")
3667db96d56Sopenharmony_ci
3677db96d56Sopenharmony_ciIf you don't supply a destination, :mod:`optparse` figures out a sensible
3687db96d56Sopenharmony_cidefault from the option strings: if the first long option string is
3697db96d56Sopenharmony_ci``--foo-bar``, then the default destination is ``foo_bar``.  If there are no
3707db96d56Sopenharmony_cilong option strings, :mod:`optparse` looks at the first short option string: the
3717db96d56Sopenharmony_cidefault destination for ``-f`` is ``f``.
3727db96d56Sopenharmony_ci
3737db96d56Sopenharmony_ci:mod:`optparse` also includes the built-in ``complex`` type.  Adding
3747db96d56Sopenharmony_citypes is covered in section :ref:`optparse-extending-optparse`.
3757db96d56Sopenharmony_ci
3767db96d56Sopenharmony_ci
3777db96d56Sopenharmony_ci.. _optparse-handling-boolean-options:
3787db96d56Sopenharmony_ci
3797db96d56Sopenharmony_ciHandling boolean (flag) options
3807db96d56Sopenharmony_ci^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
3817db96d56Sopenharmony_ci
3827db96d56Sopenharmony_ciFlag options---set a variable to true or false when a particular option is
3837db96d56Sopenharmony_ciseen---are quite common.  :mod:`optparse` supports them with two separate actions,
3847db96d56Sopenharmony_ci``store_true`` and ``store_false``.  For example, you might have a ``verbose``
3857db96d56Sopenharmony_ciflag that is turned on with ``-v`` and off with ``-q``::
3867db96d56Sopenharmony_ci
3877db96d56Sopenharmony_ci   parser.add_option("-v", action="store_true", dest="verbose")
3887db96d56Sopenharmony_ci   parser.add_option("-q", action="store_false", dest="verbose")
3897db96d56Sopenharmony_ci
3907db96d56Sopenharmony_ciHere we have two different options with the same destination, which is perfectly
3917db96d56Sopenharmony_ciOK.  (It just means you have to be a bit careful when setting default
3927db96d56Sopenharmony_civalues---see below.)
3937db96d56Sopenharmony_ci
3947db96d56Sopenharmony_ciWhen :mod:`optparse` encounters ``-v`` on the command line, it sets
3957db96d56Sopenharmony_ci``options.verbose`` to ``True``; when it encounters ``-q``,
3967db96d56Sopenharmony_ci``options.verbose`` is set to ``False``.
3977db96d56Sopenharmony_ci
3987db96d56Sopenharmony_ci
3997db96d56Sopenharmony_ci.. _optparse-other-actions:
4007db96d56Sopenharmony_ci
4017db96d56Sopenharmony_ciOther actions
4027db96d56Sopenharmony_ci^^^^^^^^^^^^^
4037db96d56Sopenharmony_ci
4047db96d56Sopenharmony_ciSome other actions supported by :mod:`optparse` are:
4057db96d56Sopenharmony_ci
4067db96d56Sopenharmony_ci``"store_const"``
4077db96d56Sopenharmony_ci   store a constant value, pre-set via :attr:`Option.const`
4087db96d56Sopenharmony_ci
4097db96d56Sopenharmony_ci``"append"``
4107db96d56Sopenharmony_ci   append this option's argument to a list
4117db96d56Sopenharmony_ci
4127db96d56Sopenharmony_ci``"count"``
4137db96d56Sopenharmony_ci   increment a counter by one
4147db96d56Sopenharmony_ci
4157db96d56Sopenharmony_ci``"callback"``
4167db96d56Sopenharmony_ci   call a specified function
4177db96d56Sopenharmony_ci
4187db96d56Sopenharmony_ciThese are covered in section :ref:`optparse-reference-guide`,
4197db96d56Sopenharmony_ciand section :ref:`optparse-option-callbacks`.
4207db96d56Sopenharmony_ci
4217db96d56Sopenharmony_ci
4227db96d56Sopenharmony_ci.. _optparse-default-values:
4237db96d56Sopenharmony_ci
4247db96d56Sopenharmony_ciDefault values
4257db96d56Sopenharmony_ci^^^^^^^^^^^^^^
4267db96d56Sopenharmony_ci
4277db96d56Sopenharmony_ciAll of the above examples involve setting some variable (the "destination") when
4287db96d56Sopenharmony_cicertain command-line options are seen.  What happens if those options are never
4297db96d56Sopenharmony_ciseen?  Since we didn't supply any defaults, they are all set to ``None``.  This
4307db96d56Sopenharmony_ciis usually fine, but sometimes you want more control.  :mod:`optparse` lets you
4317db96d56Sopenharmony_cisupply a default value for each destination, which is assigned before the
4327db96d56Sopenharmony_cicommand line is parsed.
4337db96d56Sopenharmony_ci
4347db96d56Sopenharmony_ciFirst, consider the verbose/quiet example.  If we want :mod:`optparse` to set
4357db96d56Sopenharmony_ci``verbose`` to ``True`` unless ``-q`` is seen, then we can do this::
4367db96d56Sopenharmony_ci
4377db96d56Sopenharmony_ci   parser.add_option("-v", action="store_true", dest="verbose", default=True)
4387db96d56Sopenharmony_ci   parser.add_option("-q", action="store_false", dest="verbose")
4397db96d56Sopenharmony_ci
4407db96d56Sopenharmony_ciSince default values apply to the *destination* rather than to any particular
4417db96d56Sopenharmony_cioption, and these two options happen to have the same destination, this is
4427db96d56Sopenharmony_ciexactly equivalent::
4437db96d56Sopenharmony_ci
4447db96d56Sopenharmony_ci   parser.add_option("-v", action="store_true", dest="verbose")
4457db96d56Sopenharmony_ci   parser.add_option("-q", action="store_false", dest="verbose", default=True)
4467db96d56Sopenharmony_ci
4477db96d56Sopenharmony_ciConsider this::
4487db96d56Sopenharmony_ci
4497db96d56Sopenharmony_ci   parser.add_option("-v", action="store_true", dest="verbose", default=False)
4507db96d56Sopenharmony_ci   parser.add_option("-q", action="store_false", dest="verbose", default=True)
4517db96d56Sopenharmony_ci
4527db96d56Sopenharmony_ciAgain, the default value for ``verbose`` will be ``True``: the last default
4537db96d56Sopenharmony_civalue supplied for any particular destination is the one that counts.
4547db96d56Sopenharmony_ci
4557db96d56Sopenharmony_ciA clearer way to specify default values is the :meth:`set_defaults` method of
4567db96d56Sopenharmony_ciOptionParser, which you can call at any time before calling :meth:`parse_args`::
4577db96d56Sopenharmony_ci
4587db96d56Sopenharmony_ci   parser.set_defaults(verbose=True)
4597db96d56Sopenharmony_ci   parser.add_option(...)
4607db96d56Sopenharmony_ci   (options, args) = parser.parse_args()
4617db96d56Sopenharmony_ci
4627db96d56Sopenharmony_ciAs before, the last value specified for a given option destination is the one
4637db96d56Sopenharmony_cithat counts.  For clarity, try to use one method or the other of setting default
4647db96d56Sopenharmony_civalues, not both.
4657db96d56Sopenharmony_ci
4667db96d56Sopenharmony_ci
4677db96d56Sopenharmony_ci.. _optparse-generating-help:
4687db96d56Sopenharmony_ci
4697db96d56Sopenharmony_ciGenerating help
4707db96d56Sopenharmony_ci^^^^^^^^^^^^^^^
4717db96d56Sopenharmony_ci
4727db96d56Sopenharmony_ci:mod:`optparse`'s ability to generate help and usage text automatically is
4737db96d56Sopenharmony_ciuseful for creating user-friendly command-line interfaces.  All you have to do
4747db96d56Sopenharmony_ciis supply a :attr:`~Option.help` value for each option, and optionally a short
4757db96d56Sopenharmony_ciusage message for your whole program.  Here's an OptionParser populated with
4767db96d56Sopenharmony_ciuser-friendly (documented) options::
4777db96d56Sopenharmony_ci
4787db96d56Sopenharmony_ci   usage = "usage: %prog [options] arg1 arg2"
4797db96d56Sopenharmony_ci   parser = OptionParser(usage=usage)
4807db96d56Sopenharmony_ci   parser.add_option("-v", "--verbose",
4817db96d56Sopenharmony_ci                     action="store_true", dest="verbose", default=True,
4827db96d56Sopenharmony_ci                     help="make lots of noise [default]")
4837db96d56Sopenharmony_ci   parser.add_option("-q", "--quiet",
4847db96d56Sopenharmony_ci                     action="store_false", dest="verbose",
4857db96d56Sopenharmony_ci                     help="be vewwy quiet (I'm hunting wabbits)")
4867db96d56Sopenharmony_ci   parser.add_option("-f", "--filename",
4877db96d56Sopenharmony_ci                     metavar="FILE", help="write output to FILE")
4887db96d56Sopenharmony_ci   parser.add_option("-m", "--mode",
4897db96d56Sopenharmony_ci                     default="intermediate",
4907db96d56Sopenharmony_ci                     help="interaction mode: novice, intermediate, "
4917db96d56Sopenharmony_ci                          "or expert [default: %default]")
4927db96d56Sopenharmony_ci
4937db96d56Sopenharmony_ciIf :mod:`optparse` encounters either ``-h`` or ``--help`` on the
4947db96d56Sopenharmony_cicommand-line, or if you just call :meth:`parser.print_help`, it prints the
4957db96d56Sopenharmony_cifollowing to standard output:
4967db96d56Sopenharmony_ci
4977db96d56Sopenharmony_ci.. code-block:: text
4987db96d56Sopenharmony_ci
4997db96d56Sopenharmony_ci   Usage: <yourscript> [options] arg1 arg2
5007db96d56Sopenharmony_ci
5017db96d56Sopenharmony_ci   Options:
5027db96d56Sopenharmony_ci     -h, --help            show this help message and exit
5037db96d56Sopenharmony_ci     -v, --verbose         make lots of noise [default]
5047db96d56Sopenharmony_ci     -q, --quiet           be vewwy quiet (I'm hunting wabbits)
5057db96d56Sopenharmony_ci     -f FILE, --filename=FILE
5067db96d56Sopenharmony_ci                           write output to FILE
5077db96d56Sopenharmony_ci     -m MODE, --mode=MODE  interaction mode: novice, intermediate, or
5087db96d56Sopenharmony_ci                           expert [default: intermediate]
5097db96d56Sopenharmony_ci
5107db96d56Sopenharmony_ci(If the help output is triggered by a help option, :mod:`optparse` exits after
5117db96d56Sopenharmony_ciprinting the help text.)
5127db96d56Sopenharmony_ci
5137db96d56Sopenharmony_ciThere's a lot going on here to help :mod:`optparse` generate the best possible
5147db96d56Sopenharmony_cihelp message:
5157db96d56Sopenharmony_ci
5167db96d56Sopenharmony_ci* the script defines its own usage message::
5177db96d56Sopenharmony_ci
5187db96d56Sopenharmony_ci     usage = "usage: %prog [options] arg1 arg2"
5197db96d56Sopenharmony_ci
5207db96d56Sopenharmony_ci  :mod:`optparse` expands ``%prog`` in the usage string to the name of the
5217db96d56Sopenharmony_ci  current program, i.e. ``os.path.basename(sys.argv[0])``.  The expanded string
5227db96d56Sopenharmony_ci  is then printed before the detailed option help.
5237db96d56Sopenharmony_ci
5247db96d56Sopenharmony_ci  If you don't supply a usage string, :mod:`optparse` uses a bland but sensible
5257db96d56Sopenharmony_ci  default: ``"Usage: %prog [options]"``, which is fine if your script doesn't
5267db96d56Sopenharmony_ci  take any positional arguments.
5277db96d56Sopenharmony_ci
5287db96d56Sopenharmony_ci* every option defines a help string, and doesn't worry about
5297db96d56Sopenharmony_ci  line-wrapping---\ :mod:`optparse` takes care of wrapping lines and making
5307db96d56Sopenharmony_ci  the help output look good.
5317db96d56Sopenharmony_ci
5327db96d56Sopenharmony_ci* options that take a value indicate this fact in their automatically generated
5337db96d56Sopenharmony_ci  help message, e.g. for the "mode" option::
5347db96d56Sopenharmony_ci
5357db96d56Sopenharmony_ci     -m MODE, --mode=MODE
5367db96d56Sopenharmony_ci
5377db96d56Sopenharmony_ci  Here, "MODE" is called the meta-variable: it stands for the argument that the
5387db96d56Sopenharmony_ci  user is expected to supply to ``-m``/``--mode``.  By default,
5397db96d56Sopenharmony_ci  :mod:`optparse` converts the destination variable name to uppercase and uses
5407db96d56Sopenharmony_ci  that for the meta-variable.  Sometimes, that's not what you want---for
5417db96d56Sopenharmony_ci  example, the ``--filename`` option explicitly sets ``metavar="FILE"``,
5427db96d56Sopenharmony_ci  resulting in this automatically generated option description::
5437db96d56Sopenharmony_ci
5447db96d56Sopenharmony_ci     -f FILE, --filename=FILE
5457db96d56Sopenharmony_ci
5467db96d56Sopenharmony_ci  This is important for more than just saving space, though: the manually
5477db96d56Sopenharmony_ci  written help text uses the meta-variable ``FILE`` to clue the user in that
5487db96d56Sopenharmony_ci  there's a connection between the semi-formal syntax ``-f FILE`` and the informal
5497db96d56Sopenharmony_ci  semantic description "write output to FILE". This is a simple but effective
5507db96d56Sopenharmony_ci  way to make your help text a lot clearer and more useful for end users.
5517db96d56Sopenharmony_ci
5527db96d56Sopenharmony_ci* options that have a default value can include ``%default`` in the help
5537db96d56Sopenharmony_ci  string---\ :mod:`optparse` will replace it with :func:`str` of the option's
5547db96d56Sopenharmony_ci  default value.  If an option has no default value (or the default value is
5557db96d56Sopenharmony_ci  ``None``), ``%default`` expands to ``none``.
5567db96d56Sopenharmony_ci
5577db96d56Sopenharmony_ciGrouping Options
5587db96d56Sopenharmony_ci++++++++++++++++
5597db96d56Sopenharmony_ci
5607db96d56Sopenharmony_ciWhen dealing with many options, it is convenient to group these options for
5617db96d56Sopenharmony_cibetter help output.  An :class:`OptionParser` can contain several option groups,
5627db96d56Sopenharmony_cieach of which can contain several options.
5637db96d56Sopenharmony_ci
5647db96d56Sopenharmony_ciAn option group is obtained using the class :class:`OptionGroup`:
5657db96d56Sopenharmony_ci
5667db96d56Sopenharmony_ci.. class:: OptionGroup(parser, title, description=None)
5677db96d56Sopenharmony_ci
5687db96d56Sopenharmony_ci   where
5697db96d56Sopenharmony_ci
5707db96d56Sopenharmony_ci   * parser is the :class:`OptionParser` instance the group will be inserted in
5717db96d56Sopenharmony_ci     to
5727db96d56Sopenharmony_ci   * title is the group title
5737db96d56Sopenharmony_ci   * description, optional, is a long description of the group
5747db96d56Sopenharmony_ci
5757db96d56Sopenharmony_ci:class:`OptionGroup` inherits from :class:`OptionContainer` (like
5767db96d56Sopenharmony_ci:class:`OptionParser`) and so the :meth:`add_option` method can be used to add
5777db96d56Sopenharmony_cian option to the group.
5787db96d56Sopenharmony_ci
5797db96d56Sopenharmony_ciOnce all the options are declared, using the :class:`OptionParser` method
5807db96d56Sopenharmony_ci:meth:`add_option_group` the group is added to the previously defined parser.
5817db96d56Sopenharmony_ci
5827db96d56Sopenharmony_ciContinuing with the parser defined in the previous section, adding an
5837db96d56Sopenharmony_ci:class:`OptionGroup` to a parser is easy::
5847db96d56Sopenharmony_ci
5857db96d56Sopenharmony_ci    group = OptionGroup(parser, "Dangerous Options",
5867db96d56Sopenharmony_ci                        "Caution: use these options at your own risk.  "
5877db96d56Sopenharmony_ci                        "It is believed that some of them bite.")
5887db96d56Sopenharmony_ci    group.add_option("-g", action="store_true", help="Group option.")
5897db96d56Sopenharmony_ci    parser.add_option_group(group)
5907db96d56Sopenharmony_ci
5917db96d56Sopenharmony_ciThis would result in the following help output:
5927db96d56Sopenharmony_ci
5937db96d56Sopenharmony_ci.. code-block:: text
5947db96d56Sopenharmony_ci
5957db96d56Sopenharmony_ci   Usage: <yourscript> [options] arg1 arg2
5967db96d56Sopenharmony_ci
5977db96d56Sopenharmony_ci   Options:
5987db96d56Sopenharmony_ci     -h, --help            show this help message and exit
5997db96d56Sopenharmony_ci     -v, --verbose         make lots of noise [default]
6007db96d56Sopenharmony_ci     -q, --quiet           be vewwy quiet (I'm hunting wabbits)
6017db96d56Sopenharmony_ci     -f FILE, --filename=FILE
6027db96d56Sopenharmony_ci                           write output to FILE
6037db96d56Sopenharmony_ci     -m MODE, --mode=MODE  interaction mode: novice, intermediate, or
6047db96d56Sopenharmony_ci                           expert [default: intermediate]
6057db96d56Sopenharmony_ci
6067db96d56Sopenharmony_ci     Dangerous Options:
6077db96d56Sopenharmony_ci       Caution: use these options at your own risk.  It is believed that some
6087db96d56Sopenharmony_ci       of them bite.
6097db96d56Sopenharmony_ci
6107db96d56Sopenharmony_ci       -g                  Group option.
6117db96d56Sopenharmony_ci
6127db96d56Sopenharmony_ciA bit more complete example might involve using more than one group: still
6137db96d56Sopenharmony_ciextending the previous example::
6147db96d56Sopenharmony_ci
6157db96d56Sopenharmony_ci    group = OptionGroup(parser, "Dangerous Options",
6167db96d56Sopenharmony_ci                        "Caution: use these options at your own risk.  "
6177db96d56Sopenharmony_ci                        "It is believed that some of them bite.")
6187db96d56Sopenharmony_ci    group.add_option("-g", action="store_true", help="Group option.")
6197db96d56Sopenharmony_ci    parser.add_option_group(group)
6207db96d56Sopenharmony_ci
6217db96d56Sopenharmony_ci    group = OptionGroup(parser, "Debug Options")
6227db96d56Sopenharmony_ci    group.add_option("-d", "--debug", action="store_true",
6237db96d56Sopenharmony_ci                     help="Print debug information")
6247db96d56Sopenharmony_ci    group.add_option("-s", "--sql", action="store_true",
6257db96d56Sopenharmony_ci                     help="Print all SQL statements executed")
6267db96d56Sopenharmony_ci    group.add_option("-e", action="store_true", help="Print every action done")
6277db96d56Sopenharmony_ci    parser.add_option_group(group)
6287db96d56Sopenharmony_ci
6297db96d56Sopenharmony_cithat results in the following output:
6307db96d56Sopenharmony_ci
6317db96d56Sopenharmony_ci.. code-block:: text
6327db96d56Sopenharmony_ci
6337db96d56Sopenharmony_ci   Usage: <yourscript> [options] arg1 arg2
6347db96d56Sopenharmony_ci
6357db96d56Sopenharmony_ci   Options:
6367db96d56Sopenharmony_ci     -h, --help            show this help message and exit
6377db96d56Sopenharmony_ci     -v, --verbose         make lots of noise [default]
6387db96d56Sopenharmony_ci     -q, --quiet           be vewwy quiet (I'm hunting wabbits)
6397db96d56Sopenharmony_ci     -f FILE, --filename=FILE
6407db96d56Sopenharmony_ci                           write output to FILE
6417db96d56Sopenharmony_ci     -m MODE, --mode=MODE  interaction mode: novice, intermediate, or expert
6427db96d56Sopenharmony_ci                           [default: intermediate]
6437db96d56Sopenharmony_ci
6447db96d56Sopenharmony_ci     Dangerous Options:
6457db96d56Sopenharmony_ci       Caution: use these options at your own risk.  It is believed that some
6467db96d56Sopenharmony_ci       of them bite.
6477db96d56Sopenharmony_ci
6487db96d56Sopenharmony_ci       -g                  Group option.
6497db96d56Sopenharmony_ci
6507db96d56Sopenharmony_ci     Debug Options:
6517db96d56Sopenharmony_ci       -d, --debug         Print debug information
6527db96d56Sopenharmony_ci       -s, --sql           Print all SQL statements executed
6537db96d56Sopenharmony_ci       -e                  Print every action done
6547db96d56Sopenharmony_ci
6557db96d56Sopenharmony_ciAnother interesting method, in particular when working programmatically with
6567db96d56Sopenharmony_cioption groups is:
6577db96d56Sopenharmony_ci
6587db96d56Sopenharmony_ci.. method:: OptionParser.get_option_group(opt_str)
6597db96d56Sopenharmony_ci
6607db96d56Sopenharmony_ci   Return the :class:`OptionGroup` to which the short or long option
6617db96d56Sopenharmony_ci   string *opt_str* (e.g. ``'-o'`` or ``'--option'``) belongs. If
6627db96d56Sopenharmony_ci   there's no such :class:`OptionGroup`, return ``None``.
6637db96d56Sopenharmony_ci
6647db96d56Sopenharmony_ci.. _optparse-printing-version-string:
6657db96d56Sopenharmony_ci
6667db96d56Sopenharmony_ciPrinting a version string
6677db96d56Sopenharmony_ci^^^^^^^^^^^^^^^^^^^^^^^^^
6687db96d56Sopenharmony_ci
6697db96d56Sopenharmony_ciSimilar to the brief usage string, :mod:`optparse` can also print a version
6707db96d56Sopenharmony_cistring for your program.  You have to supply the string as the ``version``
6717db96d56Sopenharmony_ciargument to OptionParser::
6727db96d56Sopenharmony_ci
6737db96d56Sopenharmony_ci   parser = OptionParser(usage="%prog [-f] [-q]", version="%prog 1.0")
6747db96d56Sopenharmony_ci
6757db96d56Sopenharmony_ci``%prog`` is expanded just like it is in ``usage``.  Apart from that,
6767db96d56Sopenharmony_ci``version`` can contain anything you like.  When you supply it, :mod:`optparse`
6777db96d56Sopenharmony_ciautomatically adds a ``--version`` option to your parser. If it encounters
6787db96d56Sopenharmony_cithis option on the command line, it expands your ``version`` string (by
6797db96d56Sopenharmony_cireplacing ``%prog``), prints it to stdout, and exits.
6807db96d56Sopenharmony_ci
6817db96d56Sopenharmony_ciFor example, if your script is called ``/usr/bin/foo``:
6827db96d56Sopenharmony_ci
6837db96d56Sopenharmony_ci.. code-block:: shell-session
6847db96d56Sopenharmony_ci
6857db96d56Sopenharmony_ci   $ /usr/bin/foo --version
6867db96d56Sopenharmony_ci   foo 1.0
6877db96d56Sopenharmony_ci
6887db96d56Sopenharmony_ciThe following two methods can be used to print and get the ``version`` string:
6897db96d56Sopenharmony_ci
6907db96d56Sopenharmony_ci.. method:: OptionParser.print_version(file=None)
6917db96d56Sopenharmony_ci
6927db96d56Sopenharmony_ci   Print the version message for the current program (``self.version``) to
6937db96d56Sopenharmony_ci   *file* (default stdout).  As with :meth:`print_usage`, any occurrence
6947db96d56Sopenharmony_ci   of ``%prog`` in ``self.version`` is replaced with the name of the current
6957db96d56Sopenharmony_ci   program.  Does nothing if ``self.version`` is empty or undefined.
6967db96d56Sopenharmony_ci
6977db96d56Sopenharmony_ci.. method:: OptionParser.get_version()
6987db96d56Sopenharmony_ci
6997db96d56Sopenharmony_ci   Same as :meth:`print_version` but returns the version string instead of
7007db96d56Sopenharmony_ci   printing it.
7017db96d56Sopenharmony_ci
7027db96d56Sopenharmony_ci
7037db96d56Sopenharmony_ci.. _optparse-how-optparse-handles-errors:
7047db96d56Sopenharmony_ci
7057db96d56Sopenharmony_ciHow :mod:`optparse` handles errors
7067db96d56Sopenharmony_ci^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
7077db96d56Sopenharmony_ci
7087db96d56Sopenharmony_ciThere are two broad classes of errors that :mod:`optparse` has to worry about:
7097db96d56Sopenharmony_ciprogrammer errors and user errors.  Programmer errors are usually erroneous
7107db96d56Sopenharmony_cicalls to :func:`OptionParser.add_option`, e.g. invalid option strings, unknown
7117db96d56Sopenharmony_cioption attributes, missing option attributes, etc.  These are dealt with in the
7127db96d56Sopenharmony_ciusual way: raise an exception (either :exc:`optparse.OptionError` or
7137db96d56Sopenharmony_ci:exc:`TypeError`) and let the program crash.
7147db96d56Sopenharmony_ci
7157db96d56Sopenharmony_ciHandling user errors is much more important, since they are guaranteed to happen
7167db96d56Sopenharmony_cino matter how stable your code is.  :mod:`optparse` can automatically detect
7177db96d56Sopenharmony_cisome user errors, such as bad option arguments (passing ``-n 4x`` where
7187db96d56Sopenharmony_ci``-n`` takes an integer argument), missing arguments (``-n`` at the end
7197db96d56Sopenharmony_ciof the command line, where ``-n`` takes an argument of any type).  Also,
7207db96d56Sopenharmony_ciyou can call :func:`OptionParser.error` to signal an application-defined error
7217db96d56Sopenharmony_cicondition::
7227db96d56Sopenharmony_ci
7237db96d56Sopenharmony_ci   (options, args) = parser.parse_args()
7247db96d56Sopenharmony_ci   ...
7257db96d56Sopenharmony_ci   if options.a and options.b:
7267db96d56Sopenharmony_ci       parser.error("options -a and -b are mutually exclusive")
7277db96d56Sopenharmony_ci
7287db96d56Sopenharmony_ciIn either case, :mod:`optparse` handles the error the same way: it prints the
7297db96d56Sopenharmony_ciprogram's usage message and an error message to standard error and exits with
7307db96d56Sopenharmony_cierror status 2.
7317db96d56Sopenharmony_ci
7327db96d56Sopenharmony_ciConsider the first example above, where the user passes ``4x`` to an option
7337db96d56Sopenharmony_cithat takes an integer:
7347db96d56Sopenharmony_ci
7357db96d56Sopenharmony_ci.. code-block:: shell-session
7367db96d56Sopenharmony_ci
7377db96d56Sopenharmony_ci   $ /usr/bin/foo -n 4x
7387db96d56Sopenharmony_ci   Usage: foo [options]
7397db96d56Sopenharmony_ci
7407db96d56Sopenharmony_ci   foo: error: option -n: invalid integer value: '4x'
7417db96d56Sopenharmony_ci
7427db96d56Sopenharmony_ciOr, where the user fails to pass a value at all:
7437db96d56Sopenharmony_ci
7447db96d56Sopenharmony_ci.. code-block:: shell-session
7457db96d56Sopenharmony_ci
7467db96d56Sopenharmony_ci   $ /usr/bin/foo -n
7477db96d56Sopenharmony_ci   Usage: foo [options]
7487db96d56Sopenharmony_ci
7497db96d56Sopenharmony_ci   foo: error: -n option requires an argument
7507db96d56Sopenharmony_ci
7517db96d56Sopenharmony_ci:mod:`optparse`\ -generated error messages take care always to mention the
7527db96d56Sopenharmony_cioption involved in the error; be sure to do the same when calling
7537db96d56Sopenharmony_ci:func:`OptionParser.error` from your application code.
7547db96d56Sopenharmony_ci
7557db96d56Sopenharmony_ciIf :mod:`optparse`'s default error-handling behaviour does not suit your needs,
7567db96d56Sopenharmony_ciyou'll need to subclass OptionParser and override its :meth:`~OptionParser.exit`
7577db96d56Sopenharmony_ciand/or :meth:`~OptionParser.error` methods.
7587db96d56Sopenharmony_ci
7597db96d56Sopenharmony_ci
7607db96d56Sopenharmony_ci.. _optparse-putting-it-all-together:
7617db96d56Sopenharmony_ci
7627db96d56Sopenharmony_ciPutting it all together
7637db96d56Sopenharmony_ci^^^^^^^^^^^^^^^^^^^^^^^
7647db96d56Sopenharmony_ci
7657db96d56Sopenharmony_ciHere's what :mod:`optparse`\ -based scripts usually look like::
7667db96d56Sopenharmony_ci
7677db96d56Sopenharmony_ci   from optparse import OptionParser
7687db96d56Sopenharmony_ci   ...
7697db96d56Sopenharmony_ci   def main():
7707db96d56Sopenharmony_ci       usage = "usage: %prog [options] arg"
7717db96d56Sopenharmony_ci       parser = OptionParser(usage)
7727db96d56Sopenharmony_ci       parser.add_option("-f", "--file", dest="filename",
7737db96d56Sopenharmony_ci                         help="read data from FILENAME")
7747db96d56Sopenharmony_ci       parser.add_option("-v", "--verbose",
7757db96d56Sopenharmony_ci                         action="store_true", dest="verbose")
7767db96d56Sopenharmony_ci       parser.add_option("-q", "--quiet",
7777db96d56Sopenharmony_ci                         action="store_false", dest="verbose")
7787db96d56Sopenharmony_ci       ...
7797db96d56Sopenharmony_ci       (options, args) = parser.parse_args()
7807db96d56Sopenharmony_ci       if len(args) != 1:
7817db96d56Sopenharmony_ci           parser.error("incorrect number of arguments")
7827db96d56Sopenharmony_ci       if options.verbose:
7837db96d56Sopenharmony_ci           print("reading %s..." % options.filename)
7847db96d56Sopenharmony_ci       ...
7857db96d56Sopenharmony_ci
7867db96d56Sopenharmony_ci   if __name__ == "__main__":
7877db96d56Sopenharmony_ci       main()
7887db96d56Sopenharmony_ci
7897db96d56Sopenharmony_ci
7907db96d56Sopenharmony_ci.. _optparse-reference-guide:
7917db96d56Sopenharmony_ci
7927db96d56Sopenharmony_ciReference Guide
7937db96d56Sopenharmony_ci---------------
7947db96d56Sopenharmony_ci
7957db96d56Sopenharmony_ci
7967db96d56Sopenharmony_ci.. _optparse-creating-parser:
7977db96d56Sopenharmony_ci
7987db96d56Sopenharmony_ciCreating the parser
7997db96d56Sopenharmony_ci^^^^^^^^^^^^^^^^^^^
8007db96d56Sopenharmony_ci
8017db96d56Sopenharmony_ciThe first step in using :mod:`optparse` is to create an OptionParser instance.
8027db96d56Sopenharmony_ci
8037db96d56Sopenharmony_ci.. class:: OptionParser(...)
8047db96d56Sopenharmony_ci
8057db96d56Sopenharmony_ci   The OptionParser constructor has no required arguments, but a number of
8067db96d56Sopenharmony_ci   optional keyword arguments.  You should always pass them as keyword
8077db96d56Sopenharmony_ci   arguments, i.e. do not rely on the order in which the arguments are declared.
8087db96d56Sopenharmony_ci
8097db96d56Sopenharmony_ci   ``usage`` (default: ``"%prog [options]"``)
8107db96d56Sopenharmony_ci      The usage summary to print when your program is run incorrectly or with a
8117db96d56Sopenharmony_ci      help option.  When :mod:`optparse` prints the usage string, it expands
8127db96d56Sopenharmony_ci      ``%prog`` to ``os.path.basename(sys.argv[0])`` (or to ``prog`` if you
8137db96d56Sopenharmony_ci      passed that keyword argument).  To suppress a usage message, pass the
8147db96d56Sopenharmony_ci      special value :data:`optparse.SUPPRESS_USAGE`.
8157db96d56Sopenharmony_ci
8167db96d56Sopenharmony_ci   ``option_list`` (default: ``[]``)
8177db96d56Sopenharmony_ci      A list of Option objects to populate the parser with.  The options in
8187db96d56Sopenharmony_ci      ``option_list`` are added after any options in ``standard_option_list`` (a
8197db96d56Sopenharmony_ci      class attribute that may be set by OptionParser subclasses), but before
8207db96d56Sopenharmony_ci      any version or help options. Deprecated; use :meth:`add_option` after
8217db96d56Sopenharmony_ci      creating the parser instead.
8227db96d56Sopenharmony_ci
8237db96d56Sopenharmony_ci   ``option_class`` (default: optparse.Option)
8247db96d56Sopenharmony_ci      Class to use when adding options to the parser in :meth:`add_option`.
8257db96d56Sopenharmony_ci
8267db96d56Sopenharmony_ci   ``version`` (default: ``None``)
8277db96d56Sopenharmony_ci      A version string to print when the user supplies a version option. If you
8287db96d56Sopenharmony_ci      supply a true value for ``version``, :mod:`optparse` automatically adds a
8297db96d56Sopenharmony_ci      version option with the single option string ``--version``.  The
8307db96d56Sopenharmony_ci      substring ``%prog`` is expanded the same as for ``usage``.
8317db96d56Sopenharmony_ci
8327db96d56Sopenharmony_ci   ``conflict_handler`` (default: ``"error"``)
8337db96d56Sopenharmony_ci      Specifies what to do when options with conflicting option strings are
8347db96d56Sopenharmony_ci      added to the parser; see section
8357db96d56Sopenharmony_ci      :ref:`optparse-conflicts-between-options`.
8367db96d56Sopenharmony_ci
8377db96d56Sopenharmony_ci   ``description`` (default: ``None``)
8387db96d56Sopenharmony_ci      A paragraph of text giving a brief overview of your program.
8397db96d56Sopenharmony_ci      :mod:`optparse` reformats this paragraph to fit the current terminal width
8407db96d56Sopenharmony_ci      and prints it when the user requests help (after ``usage``, but before the
8417db96d56Sopenharmony_ci      list of options).
8427db96d56Sopenharmony_ci
8437db96d56Sopenharmony_ci   ``formatter`` (default: a new :class:`IndentedHelpFormatter`)
8447db96d56Sopenharmony_ci      An instance of optparse.HelpFormatter that will be used for printing help
8457db96d56Sopenharmony_ci      text.  :mod:`optparse` provides two concrete classes for this purpose:
8467db96d56Sopenharmony_ci      IndentedHelpFormatter and TitledHelpFormatter.
8477db96d56Sopenharmony_ci
8487db96d56Sopenharmony_ci   ``add_help_option`` (default: ``True``)
8497db96d56Sopenharmony_ci      If true, :mod:`optparse` will add a help option (with option strings ``-h``
8507db96d56Sopenharmony_ci      and ``--help``) to the parser.
8517db96d56Sopenharmony_ci
8527db96d56Sopenharmony_ci   ``prog``
8537db96d56Sopenharmony_ci      The string to use when expanding ``%prog`` in ``usage`` and ``version``
8547db96d56Sopenharmony_ci      instead of ``os.path.basename(sys.argv[0])``.
8557db96d56Sopenharmony_ci
8567db96d56Sopenharmony_ci   ``epilog`` (default: ``None``)
8577db96d56Sopenharmony_ci      A paragraph of help text to print after the option help.
8587db96d56Sopenharmony_ci
8597db96d56Sopenharmony_ci.. _optparse-populating-parser:
8607db96d56Sopenharmony_ci
8617db96d56Sopenharmony_ciPopulating the parser
8627db96d56Sopenharmony_ci^^^^^^^^^^^^^^^^^^^^^
8637db96d56Sopenharmony_ci
8647db96d56Sopenharmony_ciThere are several ways to populate the parser with options.  The preferred way
8657db96d56Sopenharmony_ciis by using :meth:`OptionParser.add_option`, as shown in section
8667db96d56Sopenharmony_ci:ref:`optparse-tutorial`.  :meth:`add_option` can be called in one of two ways:
8677db96d56Sopenharmony_ci
8687db96d56Sopenharmony_ci* pass it an Option instance (as returned by :func:`make_option`)
8697db96d56Sopenharmony_ci
8707db96d56Sopenharmony_ci* pass it any combination of positional and keyword arguments that are
8717db96d56Sopenharmony_ci  acceptable to :func:`make_option` (i.e., to the Option constructor), and it
8727db96d56Sopenharmony_ci  will create the Option instance for you
8737db96d56Sopenharmony_ci
8747db96d56Sopenharmony_ciThe other alternative is to pass a list of pre-constructed Option instances to
8757db96d56Sopenharmony_cithe OptionParser constructor, as in::
8767db96d56Sopenharmony_ci
8777db96d56Sopenharmony_ci   option_list = [
8787db96d56Sopenharmony_ci       make_option("-f", "--filename",
8797db96d56Sopenharmony_ci                   action="store", type="string", dest="filename"),
8807db96d56Sopenharmony_ci       make_option("-q", "--quiet",
8817db96d56Sopenharmony_ci                   action="store_false", dest="verbose"),
8827db96d56Sopenharmony_ci       ]
8837db96d56Sopenharmony_ci   parser = OptionParser(option_list=option_list)
8847db96d56Sopenharmony_ci
8857db96d56Sopenharmony_ci(:func:`make_option` is a factory function for creating Option instances;
8867db96d56Sopenharmony_cicurrently it is an alias for the Option constructor.  A future version of
8877db96d56Sopenharmony_ci:mod:`optparse` may split Option into several classes, and :func:`make_option`
8887db96d56Sopenharmony_ciwill pick the right class to instantiate.  Do not instantiate Option directly.)
8897db96d56Sopenharmony_ci
8907db96d56Sopenharmony_ci
8917db96d56Sopenharmony_ci.. _optparse-defining-options:
8927db96d56Sopenharmony_ci
8937db96d56Sopenharmony_ciDefining options
8947db96d56Sopenharmony_ci^^^^^^^^^^^^^^^^
8957db96d56Sopenharmony_ci
8967db96d56Sopenharmony_ciEach Option instance represents a set of synonymous command-line option strings,
8977db96d56Sopenharmony_cie.g. ``-f`` and ``--file``.  You can specify any number of short or
8987db96d56Sopenharmony_cilong option strings, but you must specify at least one overall option string.
8997db96d56Sopenharmony_ci
9007db96d56Sopenharmony_ciThe canonical way to create an :class:`Option` instance is with the
9017db96d56Sopenharmony_ci:meth:`add_option` method of :class:`OptionParser`.
9027db96d56Sopenharmony_ci
9037db96d56Sopenharmony_ci.. method:: OptionParser.add_option(option)
9047db96d56Sopenharmony_ci            OptionParser.add_option(*opt_str, attr=value, ...)
9057db96d56Sopenharmony_ci
9067db96d56Sopenharmony_ci   To define an option with only a short option string::
9077db96d56Sopenharmony_ci
9087db96d56Sopenharmony_ci      parser.add_option("-f", attr=value, ...)
9097db96d56Sopenharmony_ci
9107db96d56Sopenharmony_ci   And to define an option with only a long option string::
9117db96d56Sopenharmony_ci
9127db96d56Sopenharmony_ci      parser.add_option("--foo", attr=value, ...)
9137db96d56Sopenharmony_ci
9147db96d56Sopenharmony_ci   The keyword arguments define attributes of the new Option object.  The most
9157db96d56Sopenharmony_ci   important option attribute is :attr:`~Option.action`, and it largely
9167db96d56Sopenharmony_ci   determines which other attributes are relevant or required.  If you pass
9177db96d56Sopenharmony_ci   irrelevant option attributes, or fail to pass required ones, :mod:`optparse`
9187db96d56Sopenharmony_ci   raises an :exc:`OptionError` exception explaining your mistake.
9197db96d56Sopenharmony_ci
9207db96d56Sopenharmony_ci   An option's *action* determines what :mod:`optparse` does when it encounters
9217db96d56Sopenharmony_ci   this option on the command-line.  The standard option actions hard-coded into
9227db96d56Sopenharmony_ci   :mod:`optparse` are:
9237db96d56Sopenharmony_ci
9247db96d56Sopenharmony_ci   ``"store"``
9257db96d56Sopenharmony_ci      store this option's argument (default)
9267db96d56Sopenharmony_ci
9277db96d56Sopenharmony_ci   ``"store_const"``
9287db96d56Sopenharmony_ci      store a constant value, pre-set via :attr:`Option.const`
9297db96d56Sopenharmony_ci
9307db96d56Sopenharmony_ci   ``"store_true"``
9317db96d56Sopenharmony_ci      store ``True``
9327db96d56Sopenharmony_ci
9337db96d56Sopenharmony_ci   ``"store_false"``
9347db96d56Sopenharmony_ci      store ``False``
9357db96d56Sopenharmony_ci
9367db96d56Sopenharmony_ci   ``"append"``
9377db96d56Sopenharmony_ci      append this option's argument to a list
9387db96d56Sopenharmony_ci
9397db96d56Sopenharmony_ci   ``"append_const"``
9407db96d56Sopenharmony_ci      append a constant value to a list, pre-set via :attr:`Option.const`
9417db96d56Sopenharmony_ci
9427db96d56Sopenharmony_ci   ``"count"``
9437db96d56Sopenharmony_ci      increment a counter by one
9447db96d56Sopenharmony_ci
9457db96d56Sopenharmony_ci   ``"callback"``
9467db96d56Sopenharmony_ci      call a specified function
9477db96d56Sopenharmony_ci
9487db96d56Sopenharmony_ci   ``"help"``
9497db96d56Sopenharmony_ci      print a usage message including all options and the documentation for them
9507db96d56Sopenharmony_ci
9517db96d56Sopenharmony_ci   (If you don't supply an action, the default is ``"store"``.  For this action,
9527db96d56Sopenharmony_ci   you may also supply :attr:`~Option.type` and :attr:`~Option.dest` option
9537db96d56Sopenharmony_ci   attributes; see :ref:`optparse-standard-option-actions`.)
9547db96d56Sopenharmony_ci
9557db96d56Sopenharmony_ciAs you can see, most actions involve storing or updating a value somewhere.
9567db96d56Sopenharmony_ci:mod:`optparse` always creates a special object for this, conventionally called
9577db96d56Sopenharmony_ci``options``, which is an instance of :class:`optparse.Values`.
9587db96d56Sopenharmony_ci
9597db96d56Sopenharmony_ci.. class:: Values
9607db96d56Sopenharmony_ci
9617db96d56Sopenharmony_ci   An object holding parsed argument names and values as attributes.
9627db96d56Sopenharmony_ci   Normally created by calling when calling :meth:`OptionParser.parse_args`,
9637db96d56Sopenharmony_ci   and can be overridden by a custom subclass passed to the *values* argument of
9647db96d56Sopenharmony_ci   :meth:`OptionParser.parse_args` (as described in :ref:`optparse-parsing-arguments`).
9657db96d56Sopenharmony_ci
9667db96d56Sopenharmony_ciOption
9677db96d56Sopenharmony_ciarguments (and various other values) are stored as attributes of this object,
9687db96d56Sopenharmony_ciaccording to the :attr:`~Option.dest` (destination) option attribute.
9697db96d56Sopenharmony_ci
9707db96d56Sopenharmony_ciFor example, when you call ::
9717db96d56Sopenharmony_ci
9727db96d56Sopenharmony_ci   parser.parse_args()
9737db96d56Sopenharmony_ci
9747db96d56Sopenharmony_cione of the first things :mod:`optparse` does is create the ``options`` object::
9757db96d56Sopenharmony_ci
9767db96d56Sopenharmony_ci   options = Values()
9777db96d56Sopenharmony_ci
9787db96d56Sopenharmony_ciIf one of the options in this parser is defined with ::
9797db96d56Sopenharmony_ci
9807db96d56Sopenharmony_ci   parser.add_option("-f", "--file", action="store", type="string", dest="filename")
9817db96d56Sopenharmony_ci
9827db96d56Sopenharmony_ciand the command-line being parsed includes any of the following::
9837db96d56Sopenharmony_ci
9847db96d56Sopenharmony_ci   -ffoo
9857db96d56Sopenharmony_ci   -f foo
9867db96d56Sopenharmony_ci   --file=foo
9877db96d56Sopenharmony_ci   --file foo
9887db96d56Sopenharmony_ci
9897db96d56Sopenharmony_cithen :mod:`optparse`, on seeing this option, will do the equivalent of ::
9907db96d56Sopenharmony_ci
9917db96d56Sopenharmony_ci   options.filename = "foo"
9927db96d56Sopenharmony_ci
9937db96d56Sopenharmony_ciThe :attr:`~Option.type` and :attr:`~Option.dest` option attributes are almost
9947db96d56Sopenharmony_cias important as :attr:`~Option.action`, but :attr:`~Option.action` is the only
9957db96d56Sopenharmony_cione that makes sense for *all* options.
9967db96d56Sopenharmony_ci
9977db96d56Sopenharmony_ci
9987db96d56Sopenharmony_ci.. _optparse-option-attributes:
9997db96d56Sopenharmony_ci
10007db96d56Sopenharmony_ciOption attributes
10017db96d56Sopenharmony_ci^^^^^^^^^^^^^^^^^
10027db96d56Sopenharmony_ci
10037db96d56Sopenharmony_ci.. class:: Option
10047db96d56Sopenharmony_ci
10057db96d56Sopenharmony_ci   A single command line argument,
10067db96d56Sopenharmony_ci   with various attributes passed by keyword to the constructor.
10077db96d56Sopenharmony_ci   Normally created with :meth:`OptionParser.add_option` rather than directly,
10087db96d56Sopenharmony_ci   and can be overridden by a custom class via the *option_class* argument
10097db96d56Sopenharmony_ci   to :class:`OptionParser`.
10107db96d56Sopenharmony_ci
10117db96d56Sopenharmony_ciThe following option attributes may be passed as keyword arguments to
10127db96d56Sopenharmony_ci:meth:`OptionParser.add_option`.  If you pass an option attribute that is not
10137db96d56Sopenharmony_cirelevant to a particular option, or fail to pass a required option attribute,
10147db96d56Sopenharmony_ci:mod:`optparse` raises :exc:`OptionError`.
10157db96d56Sopenharmony_ci
10167db96d56Sopenharmony_ci.. attribute:: Option.action
10177db96d56Sopenharmony_ci
10187db96d56Sopenharmony_ci   (default: ``"store"``)
10197db96d56Sopenharmony_ci
10207db96d56Sopenharmony_ci   Determines :mod:`optparse`'s behaviour when this option is seen on the
10217db96d56Sopenharmony_ci   command line; the available options are documented :ref:`here
10227db96d56Sopenharmony_ci   <optparse-standard-option-actions>`.
10237db96d56Sopenharmony_ci
10247db96d56Sopenharmony_ci.. attribute:: Option.type
10257db96d56Sopenharmony_ci
10267db96d56Sopenharmony_ci   (default: ``"string"``)
10277db96d56Sopenharmony_ci
10287db96d56Sopenharmony_ci   The argument type expected by this option (e.g., ``"string"`` or ``"int"``);
10297db96d56Sopenharmony_ci   the available option types are documented :ref:`here
10307db96d56Sopenharmony_ci   <optparse-standard-option-types>`.
10317db96d56Sopenharmony_ci
10327db96d56Sopenharmony_ci.. attribute:: Option.dest
10337db96d56Sopenharmony_ci
10347db96d56Sopenharmony_ci   (default: derived from option strings)
10357db96d56Sopenharmony_ci
10367db96d56Sopenharmony_ci   If the option's action implies writing or modifying a value somewhere, this
10377db96d56Sopenharmony_ci   tells :mod:`optparse` where to write it: :attr:`~Option.dest` names an
10387db96d56Sopenharmony_ci   attribute of the ``options`` object that :mod:`optparse` builds as it parses
10397db96d56Sopenharmony_ci   the command line.
10407db96d56Sopenharmony_ci
10417db96d56Sopenharmony_ci.. attribute:: Option.default
10427db96d56Sopenharmony_ci
10437db96d56Sopenharmony_ci   The value to use for this option's destination if the option is not seen on
10447db96d56Sopenharmony_ci   the command line.  See also :meth:`OptionParser.set_defaults`.
10457db96d56Sopenharmony_ci
10467db96d56Sopenharmony_ci.. attribute:: Option.nargs
10477db96d56Sopenharmony_ci
10487db96d56Sopenharmony_ci   (default: 1)
10497db96d56Sopenharmony_ci
10507db96d56Sopenharmony_ci   How many arguments of type :attr:`~Option.type` should be consumed when this
10517db96d56Sopenharmony_ci   option is seen.  If > 1, :mod:`optparse` will store a tuple of values to
10527db96d56Sopenharmony_ci   :attr:`~Option.dest`.
10537db96d56Sopenharmony_ci
10547db96d56Sopenharmony_ci.. attribute:: Option.const
10557db96d56Sopenharmony_ci
10567db96d56Sopenharmony_ci   For actions that store a constant value, the constant value to store.
10577db96d56Sopenharmony_ci
10587db96d56Sopenharmony_ci.. attribute:: Option.choices
10597db96d56Sopenharmony_ci
10607db96d56Sopenharmony_ci   For options of type ``"choice"``, the list of strings the user may choose
10617db96d56Sopenharmony_ci   from.
10627db96d56Sopenharmony_ci
10637db96d56Sopenharmony_ci.. attribute:: Option.callback
10647db96d56Sopenharmony_ci
10657db96d56Sopenharmony_ci   For options with action ``"callback"``, the callable to call when this option
10667db96d56Sopenharmony_ci   is seen.  See section :ref:`optparse-option-callbacks` for detail on the
10677db96d56Sopenharmony_ci   arguments passed to the callable.
10687db96d56Sopenharmony_ci
10697db96d56Sopenharmony_ci.. attribute:: Option.callback_args
10707db96d56Sopenharmony_ci               Option.callback_kwargs
10717db96d56Sopenharmony_ci
10727db96d56Sopenharmony_ci   Additional positional and keyword arguments to pass to ``callback`` after the
10737db96d56Sopenharmony_ci   four standard callback arguments.
10747db96d56Sopenharmony_ci
10757db96d56Sopenharmony_ci.. attribute:: Option.help
10767db96d56Sopenharmony_ci
10777db96d56Sopenharmony_ci   Help text to print for this option when listing all available options after
10787db96d56Sopenharmony_ci   the user supplies a :attr:`~Option.help` option (such as ``--help``).  If
10797db96d56Sopenharmony_ci   no help text is supplied, the option will be listed without help text.  To
10807db96d56Sopenharmony_ci   hide this option, use the special value :data:`optparse.SUPPRESS_HELP`.
10817db96d56Sopenharmony_ci
10827db96d56Sopenharmony_ci.. attribute:: Option.metavar
10837db96d56Sopenharmony_ci
10847db96d56Sopenharmony_ci   (default: derived from option strings)
10857db96d56Sopenharmony_ci
10867db96d56Sopenharmony_ci   Stand-in for the option argument(s) to use when printing help text.  See
10877db96d56Sopenharmony_ci   section :ref:`optparse-tutorial` for an example.
10887db96d56Sopenharmony_ci
10897db96d56Sopenharmony_ci
10907db96d56Sopenharmony_ci.. _optparse-standard-option-actions:
10917db96d56Sopenharmony_ci
10927db96d56Sopenharmony_ciStandard option actions
10937db96d56Sopenharmony_ci^^^^^^^^^^^^^^^^^^^^^^^
10947db96d56Sopenharmony_ci
10957db96d56Sopenharmony_ciThe various option actions all have slightly different requirements and effects.
10967db96d56Sopenharmony_ciMost actions have several relevant option attributes which you may specify to
10977db96d56Sopenharmony_ciguide :mod:`optparse`'s behaviour; a few have required attributes, which you
10987db96d56Sopenharmony_cimust specify for any option using that action.
10997db96d56Sopenharmony_ci
11007db96d56Sopenharmony_ci* ``"store"`` [relevant: :attr:`~Option.type`, :attr:`~Option.dest`,
11017db96d56Sopenharmony_ci  :attr:`~Option.nargs`, :attr:`~Option.choices`]
11027db96d56Sopenharmony_ci
11037db96d56Sopenharmony_ci  The option must be followed by an argument, which is converted to a value
11047db96d56Sopenharmony_ci  according to :attr:`~Option.type` and stored in :attr:`~Option.dest`.  If
11057db96d56Sopenharmony_ci  :attr:`~Option.nargs` > 1, multiple arguments will be consumed from the
11067db96d56Sopenharmony_ci  command line; all will be converted according to :attr:`~Option.type` and
11077db96d56Sopenharmony_ci  stored to :attr:`~Option.dest` as a tuple.  See the
11087db96d56Sopenharmony_ci  :ref:`optparse-standard-option-types` section.
11097db96d56Sopenharmony_ci
11107db96d56Sopenharmony_ci  If :attr:`~Option.choices` is supplied (a list or tuple of strings), the type
11117db96d56Sopenharmony_ci  defaults to ``"choice"``.
11127db96d56Sopenharmony_ci
11137db96d56Sopenharmony_ci  If :attr:`~Option.type` is not supplied, it defaults to ``"string"``.
11147db96d56Sopenharmony_ci
11157db96d56Sopenharmony_ci  If :attr:`~Option.dest` is not supplied, :mod:`optparse` derives a destination
11167db96d56Sopenharmony_ci  from the first long option string (e.g., ``--foo-bar`` implies
11177db96d56Sopenharmony_ci  ``foo_bar``). If there are no long option strings, :mod:`optparse` derives a
11187db96d56Sopenharmony_ci  destination from the first short option string (e.g., ``-f`` implies ``f``).
11197db96d56Sopenharmony_ci
11207db96d56Sopenharmony_ci  Example::
11217db96d56Sopenharmony_ci
11227db96d56Sopenharmony_ci     parser.add_option("-f")
11237db96d56Sopenharmony_ci     parser.add_option("-p", type="float", nargs=3, dest="point")
11247db96d56Sopenharmony_ci
11257db96d56Sopenharmony_ci  As it parses the command line ::
11267db96d56Sopenharmony_ci
11277db96d56Sopenharmony_ci     -f foo.txt -p 1 -3.5 4 -fbar.txt
11287db96d56Sopenharmony_ci
11297db96d56Sopenharmony_ci  :mod:`optparse` will set ::
11307db96d56Sopenharmony_ci
11317db96d56Sopenharmony_ci     options.f = "foo.txt"
11327db96d56Sopenharmony_ci     options.point = (1.0, -3.5, 4.0)
11337db96d56Sopenharmony_ci     options.f = "bar.txt"
11347db96d56Sopenharmony_ci
11357db96d56Sopenharmony_ci* ``"store_const"`` [required: :attr:`~Option.const`; relevant:
11367db96d56Sopenharmony_ci  :attr:`~Option.dest`]
11377db96d56Sopenharmony_ci
11387db96d56Sopenharmony_ci  The value :attr:`~Option.const` is stored in :attr:`~Option.dest`.
11397db96d56Sopenharmony_ci
11407db96d56Sopenharmony_ci  Example::
11417db96d56Sopenharmony_ci
11427db96d56Sopenharmony_ci     parser.add_option("-q", "--quiet",
11437db96d56Sopenharmony_ci                       action="store_const", const=0, dest="verbose")
11447db96d56Sopenharmony_ci     parser.add_option("-v", "--verbose",
11457db96d56Sopenharmony_ci                       action="store_const", const=1, dest="verbose")
11467db96d56Sopenharmony_ci     parser.add_option("--noisy",
11477db96d56Sopenharmony_ci                       action="store_const", const=2, dest="verbose")
11487db96d56Sopenharmony_ci
11497db96d56Sopenharmony_ci  If ``--noisy`` is seen, :mod:`optparse` will set  ::
11507db96d56Sopenharmony_ci
11517db96d56Sopenharmony_ci     options.verbose = 2
11527db96d56Sopenharmony_ci
11537db96d56Sopenharmony_ci* ``"store_true"`` [relevant: :attr:`~Option.dest`]
11547db96d56Sopenharmony_ci
11557db96d56Sopenharmony_ci  A special case of ``"store_const"`` that stores ``True`` to
11567db96d56Sopenharmony_ci  :attr:`~Option.dest`.
11577db96d56Sopenharmony_ci
11587db96d56Sopenharmony_ci* ``"store_false"`` [relevant: :attr:`~Option.dest`]
11597db96d56Sopenharmony_ci
11607db96d56Sopenharmony_ci  Like ``"store_true"``, but stores ``False``.
11617db96d56Sopenharmony_ci
11627db96d56Sopenharmony_ci  Example::
11637db96d56Sopenharmony_ci
11647db96d56Sopenharmony_ci     parser.add_option("--clobber", action="store_true", dest="clobber")
11657db96d56Sopenharmony_ci     parser.add_option("--no-clobber", action="store_false", dest="clobber")
11667db96d56Sopenharmony_ci
11677db96d56Sopenharmony_ci* ``"append"`` [relevant: :attr:`~Option.type`, :attr:`~Option.dest`,
11687db96d56Sopenharmony_ci  :attr:`~Option.nargs`, :attr:`~Option.choices`]
11697db96d56Sopenharmony_ci
11707db96d56Sopenharmony_ci  The option must be followed by an argument, which is appended to the list in
11717db96d56Sopenharmony_ci  :attr:`~Option.dest`.  If no default value for :attr:`~Option.dest` is
11727db96d56Sopenharmony_ci  supplied, an empty list is automatically created when :mod:`optparse` first
11737db96d56Sopenharmony_ci  encounters this option on the command-line.  If :attr:`~Option.nargs` > 1,
11747db96d56Sopenharmony_ci  multiple arguments are consumed, and a tuple of length :attr:`~Option.nargs`
11757db96d56Sopenharmony_ci  is appended to :attr:`~Option.dest`.
11767db96d56Sopenharmony_ci
11777db96d56Sopenharmony_ci  The defaults for :attr:`~Option.type` and :attr:`~Option.dest` are the same as
11787db96d56Sopenharmony_ci  for the ``"store"`` action.
11797db96d56Sopenharmony_ci
11807db96d56Sopenharmony_ci  Example::
11817db96d56Sopenharmony_ci
11827db96d56Sopenharmony_ci     parser.add_option("-t", "--tracks", action="append", type="int")
11837db96d56Sopenharmony_ci
11847db96d56Sopenharmony_ci  If ``-t3`` is seen on the command-line, :mod:`optparse` does the equivalent
11857db96d56Sopenharmony_ci  of::
11867db96d56Sopenharmony_ci
11877db96d56Sopenharmony_ci     options.tracks = []
11887db96d56Sopenharmony_ci     options.tracks.append(int("3"))
11897db96d56Sopenharmony_ci
11907db96d56Sopenharmony_ci  If, a little later on, ``--tracks=4`` is seen, it does::
11917db96d56Sopenharmony_ci
11927db96d56Sopenharmony_ci     options.tracks.append(int("4"))
11937db96d56Sopenharmony_ci
11947db96d56Sopenharmony_ci  The ``append`` action calls the ``append`` method on the current value of the
11957db96d56Sopenharmony_ci  option.  This means that any default value specified must have an ``append``
11967db96d56Sopenharmony_ci  method.  It also means that if the default value is non-empty, the default
11977db96d56Sopenharmony_ci  elements will be present in the parsed value for the option, with any values
11987db96d56Sopenharmony_ci  from the command line appended after those default values::
11997db96d56Sopenharmony_ci
12007db96d56Sopenharmony_ci     >>> parser.add_option("--files", action="append", default=['~/.mypkg/defaults'])
12017db96d56Sopenharmony_ci     >>> opts, args = parser.parse_args(['--files', 'overrides.mypkg'])
12027db96d56Sopenharmony_ci     >>> opts.files
12037db96d56Sopenharmony_ci     ['~/.mypkg/defaults', 'overrides.mypkg']
12047db96d56Sopenharmony_ci
12057db96d56Sopenharmony_ci* ``"append_const"`` [required: :attr:`~Option.const`; relevant:
12067db96d56Sopenharmony_ci  :attr:`~Option.dest`]
12077db96d56Sopenharmony_ci
12087db96d56Sopenharmony_ci  Like ``"store_const"``, but the value :attr:`~Option.const` is appended to
12097db96d56Sopenharmony_ci  :attr:`~Option.dest`; as with ``"append"``, :attr:`~Option.dest` defaults to
12107db96d56Sopenharmony_ci  ``None``, and an empty list is automatically created the first time the option
12117db96d56Sopenharmony_ci  is encountered.
12127db96d56Sopenharmony_ci
12137db96d56Sopenharmony_ci* ``"count"`` [relevant: :attr:`~Option.dest`]
12147db96d56Sopenharmony_ci
12157db96d56Sopenharmony_ci  Increment the integer stored at :attr:`~Option.dest`.  If no default value is
12167db96d56Sopenharmony_ci  supplied, :attr:`~Option.dest` is set to zero before being incremented the
12177db96d56Sopenharmony_ci  first time.
12187db96d56Sopenharmony_ci
12197db96d56Sopenharmony_ci  Example::
12207db96d56Sopenharmony_ci
12217db96d56Sopenharmony_ci     parser.add_option("-v", action="count", dest="verbosity")
12227db96d56Sopenharmony_ci
12237db96d56Sopenharmony_ci  The first time ``-v`` is seen on the command line, :mod:`optparse` does the
12247db96d56Sopenharmony_ci  equivalent of::
12257db96d56Sopenharmony_ci
12267db96d56Sopenharmony_ci     options.verbosity = 0
12277db96d56Sopenharmony_ci     options.verbosity += 1
12287db96d56Sopenharmony_ci
12297db96d56Sopenharmony_ci  Every subsequent occurrence of ``-v`` results in  ::
12307db96d56Sopenharmony_ci
12317db96d56Sopenharmony_ci     options.verbosity += 1
12327db96d56Sopenharmony_ci
12337db96d56Sopenharmony_ci* ``"callback"`` [required: :attr:`~Option.callback`; relevant:
12347db96d56Sopenharmony_ci  :attr:`~Option.type`, :attr:`~Option.nargs`, :attr:`~Option.callback_args`,
12357db96d56Sopenharmony_ci  :attr:`~Option.callback_kwargs`]
12367db96d56Sopenharmony_ci
12377db96d56Sopenharmony_ci  Call the function specified by :attr:`~Option.callback`, which is called as ::
12387db96d56Sopenharmony_ci
12397db96d56Sopenharmony_ci     func(option, opt_str, value, parser, *args, **kwargs)
12407db96d56Sopenharmony_ci
12417db96d56Sopenharmony_ci  See section :ref:`optparse-option-callbacks` for more detail.
12427db96d56Sopenharmony_ci
12437db96d56Sopenharmony_ci* ``"help"``
12447db96d56Sopenharmony_ci
12457db96d56Sopenharmony_ci  Prints a complete help message for all the options in the current option
12467db96d56Sopenharmony_ci  parser.  The help message is constructed from the ``usage`` string passed to
12477db96d56Sopenharmony_ci  OptionParser's constructor and the :attr:`~Option.help` string passed to every
12487db96d56Sopenharmony_ci  option.
12497db96d56Sopenharmony_ci
12507db96d56Sopenharmony_ci  If no :attr:`~Option.help` string is supplied for an option, it will still be
12517db96d56Sopenharmony_ci  listed in the help message.  To omit an option entirely, use the special value
12527db96d56Sopenharmony_ci  :data:`optparse.SUPPRESS_HELP`.
12537db96d56Sopenharmony_ci
12547db96d56Sopenharmony_ci  :mod:`optparse` automatically adds a :attr:`~Option.help` option to all
12557db96d56Sopenharmony_ci  OptionParsers, so you do not normally need to create one.
12567db96d56Sopenharmony_ci
12577db96d56Sopenharmony_ci  Example::
12587db96d56Sopenharmony_ci
12597db96d56Sopenharmony_ci     from optparse import OptionParser, SUPPRESS_HELP
12607db96d56Sopenharmony_ci
12617db96d56Sopenharmony_ci     # usually, a help option is added automatically, but that can
12627db96d56Sopenharmony_ci     # be suppressed using the add_help_option argument
12637db96d56Sopenharmony_ci     parser = OptionParser(add_help_option=False)
12647db96d56Sopenharmony_ci
12657db96d56Sopenharmony_ci     parser.add_option("-h", "--help", action="help")
12667db96d56Sopenharmony_ci     parser.add_option("-v", action="store_true", dest="verbose",
12677db96d56Sopenharmony_ci                       help="Be moderately verbose")
12687db96d56Sopenharmony_ci     parser.add_option("--file", dest="filename",
12697db96d56Sopenharmony_ci                       help="Input file to read data from")
12707db96d56Sopenharmony_ci     parser.add_option("--secret", help=SUPPRESS_HELP)
12717db96d56Sopenharmony_ci
12727db96d56Sopenharmony_ci  If :mod:`optparse` sees either ``-h`` or ``--help`` on the command line,
12737db96d56Sopenharmony_ci  it will print something like the following help message to stdout (assuming
12747db96d56Sopenharmony_ci  ``sys.argv[0]`` is ``"foo.py"``):
12757db96d56Sopenharmony_ci
12767db96d56Sopenharmony_ci  .. code-block:: text
12777db96d56Sopenharmony_ci
12787db96d56Sopenharmony_ci     Usage: foo.py [options]
12797db96d56Sopenharmony_ci
12807db96d56Sopenharmony_ci     Options:
12817db96d56Sopenharmony_ci       -h, --help        Show this help message and exit
12827db96d56Sopenharmony_ci       -v                Be moderately verbose
12837db96d56Sopenharmony_ci       --file=FILENAME   Input file to read data from
12847db96d56Sopenharmony_ci
12857db96d56Sopenharmony_ci  After printing the help message, :mod:`optparse` terminates your process with
12867db96d56Sopenharmony_ci  ``sys.exit(0)``.
12877db96d56Sopenharmony_ci
12887db96d56Sopenharmony_ci* ``"version"``
12897db96d56Sopenharmony_ci
12907db96d56Sopenharmony_ci  Prints the version number supplied to the OptionParser to stdout and exits.
12917db96d56Sopenharmony_ci  The version number is actually formatted and printed by the
12927db96d56Sopenharmony_ci  ``print_version()`` method of OptionParser.  Generally only relevant if the
12937db96d56Sopenharmony_ci  ``version`` argument is supplied to the OptionParser constructor.  As with
12947db96d56Sopenharmony_ci  :attr:`~Option.help` options, you will rarely create ``version`` options,
12957db96d56Sopenharmony_ci  since :mod:`optparse` automatically adds them when needed.
12967db96d56Sopenharmony_ci
12977db96d56Sopenharmony_ci
12987db96d56Sopenharmony_ci.. _optparse-standard-option-types:
12997db96d56Sopenharmony_ci
13007db96d56Sopenharmony_ciStandard option types
13017db96d56Sopenharmony_ci^^^^^^^^^^^^^^^^^^^^^
13027db96d56Sopenharmony_ci
13037db96d56Sopenharmony_ci:mod:`optparse` has five built-in option types: ``"string"``, ``"int"``,
13047db96d56Sopenharmony_ci``"choice"``, ``"float"`` and ``"complex"``.  If you need to add new
13057db96d56Sopenharmony_cioption types, see section :ref:`optparse-extending-optparse`.
13067db96d56Sopenharmony_ci
13077db96d56Sopenharmony_ciArguments to string options are not checked or converted in any way: the text on
13087db96d56Sopenharmony_cithe command line is stored in the destination (or passed to the callback) as-is.
13097db96d56Sopenharmony_ci
13107db96d56Sopenharmony_ciInteger arguments (type ``"int"``) are parsed as follows:
13117db96d56Sopenharmony_ci
13127db96d56Sopenharmony_ci* if the number starts with ``0x``, it is parsed as a hexadecimal number
13137db96d56Sopenharmony_ci
13147db96d56Sopenharmony_ci* if the number starts with ``0``, it is parsed as an octal number
13157db96d56Sopenharmony_ci
13167db96d56Sopenharmony_ci* if the number starts with ``0b``, it is parsed as a binary number
13177db96d56Sopenharmony_ci
13187db96d56Sopenharmony_ci* otherwise, the number is parsed as a decimal number
13197db96d56Sopenharmony_ci
13207db96d56Sopenharmony_ci
13217db96d56Sopenharmony_ciThe conversion is done by calling :func:`int` with the appropriate base (2, 8,
13227db96d56Sopenharmony_ci10, or 16).  If this fails, so will :mod:`optparse`, although with a more useful
13237db96d56Sopenharmony_cierror message.
13247db96d56Sopenharmony_ci
13257db96d56Sopenharmony_ci``"float"`` and ``"complex"`` option arguments are converted directly with
13267db96d56Sopenharmony_ci:func:`float` and :func:`complex`, with similar error-handling.
13277db96d56Sopenharmony_ci
13287db96d56Sopenharmony_ci``"choice"`` options are a subtype of ``"string"`` options.  The
13297db96d56Sopenharmony_ci:attr:`~Option.choices` option attribute (a sequence of strings) defines the
13307db96d56Sopenharmony_ciset of allowed option arguments.  :func:`optparse.check_choice` compares
13317db96d56Sopenharmony_ciuser-supplied option arguments against this master list and raises
13327db96d56Sopenharmony_ci:exc:`OptionValueError` if an invalid string is given.
13337db96d56Sopenharmony_ci
13347db96d56Sopenharmony_ci
13357db96d56Sopenharmony_ci.. _optparse-parsing-arguments:
13367db96d56Sopenharmony_ci
13377db96d56Sopenharmony_ciParsing arguments
13387db96d56Sopenharmony_ci^^^^^^^^^^^^^^^^^
13397db96d56Sopenharmony_ci
13407db96d56Sopenharmony_ciThe whole point of creating and populating an OptionParser is to call its
13417db96d56Sopenharmony_ci:meth:`parse_args` method::
13427db96d56Sopenharmony_ci
13437db96d56Sopenharmony_ci   (options, args) = parser.parse_args(args=None, values=None)
13447db96d56Sopenharmony_ci
13457db96d56Sopenharmony_ciwhere the input parameters are
13467db96d56Sopenharmony_ci
13477db96d56Sopenharmony_ci``args``
13487db96d56Sopenharmony_ci   the list of arguments to process (default: ``sys.argv[1:]``)
13497db96d56Sopenharmony_ci
13507db96d56Sopenharmony_ci``values``
13517db96d56Sopenharmony_ci   an :class:`optparse.Values` object to store option arguments in (default: a
13527db96d56Sopenharmony_ci   new instance of :class:`Values`) -- if you give an existing object, the
13537db96d56Sopenharmony_ci   option defaults will not be initialized on it
13547db96d56Sopenharmony_ci
13557db96d56Sopenharmony_ciand the return values are
13567db96d56Sopenharmony_ci
13577db96d56Sopenharmony_ci``options``
13587db96d56Sopenharmony_ci   the same object that was passed in as ``values``, or the optparse.Values
13597db96d56Sopenharmony_ci   instance created by :mod:`optparse`
13607db96d56Sopenharmony_ci
13617db96d56Sopenharmony_ci``args``
13627db96d56Sopenharmony_ci   the leftover positional arguments after all options have been processed
13637db96d56Sopenharmony_ci
13647db96d56Sopenharmony_ciThe most common usage is to supply neither keyword argument.  If you supply
13657db96d56Sopenharmony_ci``values``, it will be modified with repeated :func:`setattr` calls (roughly one
13667db96d56Sopenharmony_cifor every option argument stored to an option destination) and returned by
13677db96d56Sopenharmony_ci:meth:`parse_args`.
13687db96d56Sopenharmony_ci
13697db96d56Sopenharmony_ciIf :meth:`parse_args` encounters any errors in the argument list, it calls the
13707db96d56Sopenharmony_ciOptionParser's :meth:`error` method with an appropriate end-user error message.
13717db96d56Sopenharmony_ciThis ultimately terminates your process with an exit status of 2 (the
13727db96d56Sopenharmony_citraditional Unix exit status for command-line errors).
13737db96d56Sopenharmony_ci
13747db96d56Sopenharmony_ci
13757db96d56Sopenharmony_ci.. _optparse-querying-manipulating-option-parser:
13767db96d56Sopenharmony_ci
13777db96d56Sopenharmony_ciQuerying and manipulating your option parser
13787db96d56Sopenharmony_ci^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
13797db96d56Sopenharmony_ci
13807db96d56Sopenharmony_ciThe default behavior of the option parser can be customized slightly, and you
13817db96d56Sopenharmony_cican also poke around your option parser and see what's there.  OptionParser
13827db96d56Sopenharmony_ciprovides several methods to help you out:
13837db96d56Sopenharmony_ci
13847db96d56Sopenharmony_ci.. method:: OptionParser.disable_interspersed_args()
13857db96d56Sopenharmony_ci
13867db96d56Sopenharmony_ci   Set parsing to stop on the first non-option.  For example, if ``-a`` and
13877db96d56Sopenharmony_ci   ``-b`` are both simple options that take no arguments, :mod:`optparse`
13887db96d56Sopenharmony_ci   normally accepts this syntax::
13897db96d56Sopenharmony_ci
13907db96d56Sopenharmony_ci      prog -a arg1 -b arg2
13917db96d56Sopenharmony_ci
13927db96d56Sopenharmony_ci   and treats it as equivalent to  ::
13937db96d56Sopenharmony_ci
13947db96d56Sopenharmony_ci      prog -a -b arg1 arg2
13957db96d56Sopenharmony_ci
13967db96d56Sopenharmony_ci   To disable this feature, call :meth:`disable_interspersed_args`.  This
13977db96d56Sopenharmony_ci   restores traditional Unix syntax, where option parsing stops with the first
13987db96d56Sopenharmony_ci   non-option argument.
13997db96d56Sopenharmony_ci
14007db96d56Sopenharmony_ci   Use this if you have a command processor which runs another command which has
14017db96d56Sopenharmony_ci   options of its own and you want to make sure these options don't get
14027db96d56Sopenharmony_ci   confused.  For example, each command might have a different set of options.
14037db96d56Sopenharmony_ci
14047db96d56Sopenharmony_ci.. method:: OptionParser.enable_interspersed_args()
14057db96d56Sopenharmony_ci
14067db96d56Sopenharmony_ci   Set parsing to not stop on the first non-option, allowing interspersing
14077db96d56Sopenharmony_ci   switches with command arguments.  This is the default behavior.
14087db96d56Sopenharmony_ci
14097db96d56Sopenharmony_ci.. method:: OptionParser.get_option(opt_str)
14107db96d56Sopenharmony_ci
14117db96d56Sopenharmony_ci   Returns the Option instance with the option string *opt_str*, or ``None`` if
14127db96d56Sopenharmony_ci   no options have that option string.
14137db96d56Sopenharmony_ci
14147db96d56Sopenharmony_ci.. method:: OptionParser.has_option(opt_str)
14157db96d56Sopenharmony_ci
14167db96d56Sopenharmony_ci   Return ``True`` if the OptionParser has an option with option string *opt_str*
14177db96d56Sopenharmony_ci   (e.g., ``-q`` or ``--verbose``).
14187db96d56Sopenharmony_ci
14197db96d56Sopenharmony_ci.. method:: OptionParser.remove_option(opt_str)
14207db96d56Sopenharmony_ci
14217db96d56Sopenharmony_ci   If the :class:`OptionParser` has an option corresponding to *opt_str*, that
14227db96d56Sopenharmony_ci   option is removed.  If that option provided any other option strings, all of
14237db96d56Sopenharmony_ci   those option strings become invalid. If *opt_str* does not occur in any
14247db96d56Sopenharmony_ci   option belonging to this :class:`OptionParser`, raises :exc:`ValueError`.
14257db96d56Sopenharmony_ci
14267db96d56Sopenharmony_ci
14277db96d56Sopenharmony_ci.. _optparse-conflicts-between-options:
14287db96d56Sopenharmony_ci
14297db96d56Sopenharmony_ciConflicts between options
14307db96d56Sopenharmony_ci^^^^^^^^^^^^^^^^^^^^^^^^^
14317db96d56Sopenharmony_ci
14327db96d56Sopenharmony_ciIf you're not careful, it's easy to define options with conflicting option
14337db96d56Sopenharmony_cistrings::
14347db96d56Sopenharmony_ci
14357db96d56Sopenharmony_ci   parser.add_option("-n", "--dry-run", ...)
14367db96d56Sopenharmony_ci   ...
14377db96d56Sopenharmony_ci   parser.add_option("-n", "--noisy", ...)
14387db96d56Sopenharmony_ci
14397db96d56Sopenharmony_ci(This is particularly true if you've defined your own OptionParser subclass with
14407db96d56Sopenharmony_cisome standard options.)
14417db96d56Sopenharmony_ci
14427db96d56Sopenharmony_ciEvery time you add an option, :mod:`optparse` checks for conflicts with existing
14437db96d56Sopenharmony_cioptions.  If it finds any, it invokes the current conflict-handling mechanism.
14447db96d56Sopenharmony_ciYou can set the conflict-handling mechanism either in the constructor::
14457db96d56Sopenharmony_ci
14467db96d56Sopenharmony_ci   parser = OptionParser(..., conflict_handler=handler)
14477db96d56Sopenharmony_ci
14487db96d56Sopenharmony_cior with a separate call::
14497db96d56Sopenharmony_ci
14507db96d56Sopenharmony_ci   parser.set_conflict_handler(handler)
14517db96d56Sopenharmony_ci
14527db96d56Sopenharmony_ciThe available conflict handlers are:
14537db96d56Sopenharmony_ci
14547db96d56Sopenharmony_ci   ``"error"`` (default)
14557db96d56Sopenharmony_ci      assume option conflicts are a programming error and raise
14567db96d56Sopenharmony_ci      :exc:`OptionConflictError`
14577db96d56Sopenharmony_ci
14587db96d56Sopenharmony_ci   ``"resolve"``
14597db96d56Sopenharmony_ci      resolve option conflicts intelligently (see below)
14607db96d56Sopenharmony_ci
14617db96d56Sopenharmony_ci
14627db96d56Sopenharmony_ciAs an example, let's define an :class:`OptionParser` that resolves conflicts
14637db96d56Sopenharmony_ciintelligently and add conflicting options to it::
14647db96d56Sopenharmony_ci
14657db96d56Sopenharmony_ci   parser = OptionParser(conflict_handler="resolve")
14667db96d56Sopenharmony_ci   parser.add_option("-n", "--dry-run", ..., help="do no harm")
14677db96d56Sopenharmony_ci   parser.add_option("-n", "--noisy", ..., help="be noisy")
14687db96d56Sopenharmony_ci
14697db96d56Sopenharmony_ciAt this point, :mod:`optparse` detects that a previously added option is already
14707db96d56Sopenharmony_ciusing the ``-n`` option string.  Since ``conflict_handler`` is ``"resolve"``,
14717db96d56Sopenharmony_ciit resolves the situation by removing ``-n`` from the earlier option's list of
14727db96d56Sopenharmony_cioption strings.  Now ``--dry-run`` is the only way for the user to activate
14737db96d56Sopenharmony_cithat option.  If the user asks for help, the help message will reflect that::
14747db96d56Sopenharmony_ci
14757db96d56Sopenharmony_ci   Options:
14767db96d56Sopenharmony_ci     --dry-run     do no harm
14777db96d56Sopenharmony_ci     ...
14787db96d56Sopenharmony_ci     -n, --noisy   be noisy
14797db96d56Sopenharmony_ci
14807db96d56Sopenharmony_ciIt's possible to whittle away the option strings for a previously added option
14817db96d56Sopenharmony_ciuntil there are none left, and the user has no way of invoking that option from
14827db96d56Sopenharmony_cithe command-line.  In that case, :mod:`optparse` removes that option completely,
14837db96d56Sopenharmony_ciso it doesn't show up in help text or anywhere else. Carrying on with our
14847db96d56Sopenharmony_ciexisting OptionParser::
14857db96d56Sopenharmony_ci
14867db96d56Sopenharmony_ci   parser.add_option("--dry-run", ..., help="new dry-run option")
14877db96d56Sopenharmony_ci
14887db96d56Sopenharmony_ciAt this point, the original ``-n``/``--dry-run`` option is no longer
14897db96d56Sopenharmony_ciaccessible, so :mod:`optparse` removes it, leaving this help text::
14907db96d56Sopenharmony_ci
14917db96d56Sopenharmony_ci   Options:
14927db96d56Sopenharmony_ci     ...
14937db96d56Sopenharmony_ci     -n, --noisy   be noisy
14947db96d56Sopenharmony_ci     --dry-run     new dry-run option
14957db96d56Sopenharmony_ci
14967db96d56Sopenharmony_ci
14977db96d56Sopenharmony_ci.. _optparse-cleanup:
14987db96d56Sopenharmony_ci
14997db96d56Sopenharmony_ciCleanup
15007db96d56Sopenharmony_ci^^^^^^^
15017db96d56Sopenharmony_ci
15027db96d56Sopenharmony_ciOptionParser instances have several cyclic references.  This should not be a
15037db96d56Sopenharmony_ciproblem for Python's garbage collector, but you may wish to break the cyclic
15047db96d56Sopenharmony_cireferences explicitly by calling :meth:`~OptionParser.destroy` on your
15057db96d56Sopenharmony_ciOptionParser once you are done with it.  This is particularly useful in
15067db96d56Sopenharmony_cilong-running applications where large object graphs are reachable from your
15077db96d56Sopenharmony_ciOptionParser.
15087db96d56Sopenharmony_ci
15097db96d56Sopenharmony_ci
15107db96d56Sopenharmony_ci.. _optparse-other-methods:
15117db96d56Sopenharmony_ci
15127db96d56Sopenharmony_ciOther methods
15137db96d56Sopenharmony_ci^^^^^^^^^^^^^
15147db96d56Sopenharmony_ci
15157db96d56Sopenharmony_ciOptionParser supports several other public methods:
15167db96d56Sopenharmony_ci
15177db96d56Sopenharmony_ci.. method:: OptionParser.set_usage(usage)
15187db96d56Sopenharmony_ci
15197db96d56Sopenharmony_ci   Set the usage string according to the rules described above for the ``usage``
15207db96d56Sopenharmony_ci   constructor keyword argument.  Passing ``None`` sets the default usage
15217db96d56Sopenharmony_ci   string; use :data:`optparse.SUPPRESS_USAGE` to suppress a usage message.
15227db96d56Sopenharmony_ci
15237db96d56Sopenharmony_ci.. method:: OptionParser.print_usage(file=None)
15247db96d56Sopenharmony_ci
15257db96d56Sopenharmony_ci   Print the usage message for the current program (``self.usage``) to *file*
15267db96d56Sopenharmony_ci   (default stdout).  Any occurrence of the string ``%prog`` in ``self.usage``
15277db96d56Sopenharmony_ci   is replaced with the name of the current program.  Does nothing if
15287db96d56Sopenharmony_ci   ``self.usage`` is empty or not defined.
15297db96d56Sopenharmony_ci
15307db96d56Sopenharmony_ci.. method:: OptionParser.get_usage()
15317db96d56Sopenharmony_ci
15327db96d56Sopenharmony_ci   Same as :meth:`print_usage` but returns the usage string instead of
15337db96d56Sopenharmony_ci   printing it.
15347db96d56Sopenharmony_ci
15357db96d56Sopenharmony_ci.. method:: OptionParser.set_defaults(dest=value, ...)
15367db96d56Sopenharmony_ci
15377db96d56Sopenharmony_ci   Set default values for several option destinations at once.  Using
15387db96d56Sopenharmony_ci   :meth:`set_defaults` is the preferred way to set default values for options,
15397db96d56Sopenharmony_ci   since multiple options can share the same destination.  For example, if
15407db96d56Sopenharmony_ci   several "mode" options all set the same destination, any one of them can set
15417db96d56Sopenharmony_ci   the default, and the last one wins::
15427db96d56Sopenharmony_ci
15437db96d56Sopenharmony_ci      parser.add_option("--advanced", action="store_const",
15447db96d56Sopenharmony_ci                        dest="mode", const="advanced",
15457db96d56Sopenharmony_ci                        default="novice")    # overridden below
15467db96d56Sopenharmony_ci      parser.add_option("--novice", action="store_const",
15477db96d56Sopenharmony_ci                        dest="mode", const="novice",
15487db96d56Sopenharmony_ci                        default="advanced")  # overrides above setting
15497db96d56Sopenharmony_ci
15507db96d56Sopenharmony_ci   To avoid this confusion, use :meth:`set_defaults`::
15517db96d56Sopenharmony_ci
15527db96d56Sopenharmony_ci      parser.set_defaults(mode="advanced")
15537db96d56Sopenharmony_ci      parser.add_option("--advanced", action="store_const",
15547db96d56Sopenharmony_ci                        dest="mode", const="advanced")
15557db96d56Sopenharmony_ci      parser.add_option("--novice", action="store_const",
15567db96d56Sopenharmony_ci                        dest="mode", const="novice")
15577db96d56Sopenharmony_ci
15587db96d56Sopenharmony_ci
15597db96d56Sopenharmony_ci.. _optparse-option-callbacks:
15607db96d56Sopenharmony_ci
15617db96d56Sopenharmony_ciOption Callbacks
15627db96d56Sopenharmony_ci----------------
15637db96d56Sopenharmony_ci
15647db96d56Sopenharmony_ciWhen :mod:`optparse`'s built-in actions and types aren't quite enough for your
15657db96d56Sopenharmony_cineeds, you have two choices: extend :mod:`optparse` or define a callback option.
15667db96d56Sopenharmony_ciExtending :mod:`optparse` is more general, but overkill for a lot of simple
15677db96d56Sopenharmony_cicases.  Quite often a simple callback is all you need.
15687db96d56Sopenharmony_ci
15697db96d56Sopenharmony_ciThere are two steps to defining a callback option:
15707db96d56Sopenharmony_ci
15717db96d56Sopenharmony_ci* define the option itself using the ``"callback"`` action
15727db96d56Sopenharmony_ci
15737db96d56Sopenharmony_ci* write the callback; this is a function (or method) that takes at least four
15747db96d56Sopenharmony_ci  arguments, as described below
15757db96d56Sopenharmony_ci
15767db96d56Sopenharmony_ci
15777db96d56Sopenharmony_ci.. _optparse-defining-callback-option:
15787db96d56Sopenharmony_ci
15797db96d56Sopenharmony_ciDefining a callback option
15807db96d56Sopenharmony_ci^^^^^^^^^^^^^^^^^^^^^^^^^^
15817db96d56Sopenharmony_ci
15827db96d56Sopenharmony_ciAs always, the easiest way to define a callback option is by using the
15837db96d56Sopenharmony_ci:meth:`OptionParser.add_option` method.  Apart from :attr:`~Option.action`, the
15847db96d56Sopenharmony_cionly option attribute you must specify is ``callback``, the function to call::
15857db96d56Sopenharmony_ci
15867db96d56Sopenharmony_ci   parser.add_option("-c", action="callback", callback=my_callback)
15877db96d56Sopenharmony_ci
15887db96d56Sopenharmony_ci``callback`` is a function (or other callable object), so you must have already
15897db96d56Sopenharmony_cidefined ``my_callback()`` when you create this callback option. In this simple
15907db96d56Sopenharmony_cicase, :mod:`optparse` doesn't even know if ``-c`` takes any arguments,
15917db96d56Sopenharmony_ciwhich usually means that the option takes no arguments---the mere presence of
15927db96d56Sopenharmony_ci``-c`` on the command-line is all it needs to know.  In some
15937db96d56Sopenharmony_cicircumstances, though, you might want your callback to consume an arbitrary
15947db96d56Sopenharmony_cinumber of command-line arguments.  This is where writing callbacks gets tricky;
15957db96d56Sopenharmony_ciit's covered later in this section.
15967db96d56Sopenharmony_ci
15977db96d56Sopenharmony_ci:mod:`optparse` always passes four particular arguments to your callback, and it
15987db96d56Sopenharmony_ciwill only pass additional arguments if you specify them via
15997db96d56Sopenharmony_ci:attr:`~Option.callback_args` and :attr:`~Option.callback_kwargs`.  Thus, the
16007db96d56Sopenharmony_ciminimal callback function signature is::
16017db96d56Sopenharmony_ci
16027db96d56Sopenharmony_ci   def my_callback(option, opt, value, parser):
16037db96d56Sopenharmony_ci
16047db96d56Sopenharmony_ciThe four arguments to a callback are described below.
16057db96d56Sopenharmony_ci
16067db96d56Sopenharmony_ciThere are several other option attributes that you can supply when you define a
16077db96d56Sopenharmony_cicallback option:
16087db96d56Sopenharmony_ci
16097db96d56Sopenharmony_ci:attr:`~Option.type`
16107db96d56Sopenharmony_ci   has its usual meaning: as with the ``"store"`` or ``"append"`` actions, it
16117db96d56Sopenharmony_ci   instructs :mod:`optparse` to consume one argument and convert it to
16127db96d56Sopenharmony_ci   :attr:`~Option.type`.  Rather than storing the converted value(s) anywhere,
16137db96d56Sopenharmony_ci   though, :mod:`optparse` passes it to your callback function.
16147db96d56Sopenharmony_ci
16157db96d56Sopenharmony_ci:attr:`~Option.nargs`
16167db96d56Sopenharmony_ci   also has its usual meaning: if it is supplied and > 1, :mod:`optparse` will
16177db96d56Sopenharmony_ci   consume :attr:`~Option.nargs` arguments, each of which must be convertible to
16187db96d56Sopenharmony_ci   :attr:`~Option.type`.  It then passes a tuple of converted values to your
16197db96d56Sopenharmony_ci   callback.
16207db96d56Sopenharmony_ci
16217db96d56Sopenharmony_ci:attr:`~Option.callback_args`
16227db96d56Sopenharmony_ci   a tuple of extra positional arguments to pass to the callback
16237db96d56Sopenharmony_ci
16247db96d56Sopenharmony_ci:attr:`~Option.callback_kwargs`
16257db96d56Sopenharmony_ci   a dictionary of extra keyword arguments to pass to the callback
16267db96d56Sopenharmony_ci
16277db96d56Sopenharmony_ci
16287db96d56Sopenharmony_ci.. _optparse-how-callbacks-called:
16297db96d56Sopenharmony_ci
16307db96d56Sopenharmony_ciHow callbacks are called
16317db96d56Sopenharmony_ci^^^^^^^^^^^^^^^^^^^^^^^^
16327db96d56Sopenharmony_ci
16337db96d56Sopenharmony_ciAll callbacks are called as follows::
16347db96d56Sopenharmony_ci
16357db96d56Sopenharmony_ci   func(option, opt_str, value, parser, *args, **kwargs)
16367db96d56Sopenharmony_ci
16377db96d56Sopenharmony_ciwhere
16387db96d56Sopenharmony_ci
16397db96d56Sopenharmony_ci``option``
16407db96d56Sopenharmony_ci   is the Option instance that's calling the callback
16417db96d56Sopenharmony_ci
16427db96d56Sopenharmony_ci``opt_str``
16437db96d56Sopenharmony_ci   is the option string seen on the command-line that's triggering the callback.
16447db96d56Sopenharmony_ci   (If an abbreviated long option was used, ``opt_str`` will be the full,
16457db96d56Sopenharmony_ci   canonical option string---e.g. if the user puts ``--foo`` on the
16467db96d56Sopenharmony_ci   command-line as an abbreviation for ``--foobar``, then ``opt_str`` will be
16477db96d56Sopenharmony_ci   ``"--foobar"``.)
16487db96d56Sopenharmony_ci
16497db96d56Sopenharmony_ci``value``
16507db96d56Sopenharmony_ci   is the argument to this option seen on the command-line.  :mod:`optparse` will
16517db96d56Sopenharmony_ci   only expect an argument if :attr:`~Option.type` is set; the type of ``value`` will be
16527db96d56Sopenharmony_ci   the type implied by the option's type.  If :attr:`~Option.type` for this option is
16537db96d56Sopenharmony_ci   ``None`` (no argument expected), then ``value`` will be ``None``.  If :attr:`~Option.nargs`
16547db96d56Sopenharmony_ci   > 1, ``value`` will be a tuple of values of the appropriate type.
16557db96d56Sopenharmony_ci
16567db96d56Sopenharmony_ci``parser``
16577db96d56Sopenharmony_ci   is the OptionParser instance driving the whole thing, mainly useful because
16587db96d56Sopenharmony_ci   you can access some other interesting data through its instance attributes:
16597db96d56Sopenharmony_ci
16607db96d56Sopenharmony_ci   ``parser.largs``
16617db96d56Sopenharmony_ci      the current list of leftover arguments, ie. arguments that have been
16627db96d56Sopenharmony_ci      consumed but are neither options nor option arguments. Feel free to modify
16637db96d56Sopenharmony_ci      ``parser.largs``, e.g. by adding more arguments to it.  (This list will
16647db96d56Sopenharmony_ci      become ``args``, the second return value of :meth:`parse_args`.)
16657db96d56Sopenharmony_ci
16667db96d56Sopenharmony_ci   ``parser.rargs``
16677db96d56Sopenharmony_ci      the current list of remaining arguments, ie. with ``opt_str`` and
16687db96d56Sopenharmony_ci      ``value`` (if applicable) removed, and only the arguments following them
16697db96d56Sopenharmony_ci      still there.  Feel free to modify ``parser.rargs``, e.g. by consuming more
16707db96d56Sopenharmony_ci      arguments.
16717db96d56Sopenharmony_ci
16727db96d56Sopenharmony_ci   ``parser.values``
16737db96d56Sopenharmony_ci      the object where option values are by default stored (an instance of
16747db96d56Sopenharmony_ci      optparse.OptionValues).  This lets callbacks use the same mechanism as the
16757db96d56Sopenharmony_ci      rest of :mod:`optparse` for storing option values; you don't need to mess
16767db96d56Sopenharmony_ci      around with globals or closures.  You can also access or modify the
16777db96d56Sopenharmony_ci      value(s) of any options already encountered on the command-line.
16787db96d56Sopenharmony_ci
16797db96d56Sopenharmony_ci``args``
16807db96d56Sopenharmony_ci   is a tuple of arbitrary positional arguments supplied via the
16817db96d56Sopenharmony_ci   :attr:`~Option.callback_args` option attribute.
16827db96d56Sopenharmony_ci
16837db96d56Sopenharmony_ci``kwargs``
16847db96d56Sopenharmony_ci   is a dictionary of arbitrary keyword arguments supplied via
16857db96d56Sopenharmony_ci   :attr:`~Option.callback_kwargs`.
16867db96d56Sopenharmony_ci
16877db96d56Sopenharmony_ci
16887db96d56Sopenharmony_ci.. _optparse-raising-errors-in-callback:
16897db96d56Sopenharmony_ci
16907db96d56Sopenharmony_ciRaising errors in a callback
16917db96d56Sopenharmony_ci^^^^^^^^^^^^^^^^^^^^^^^^^^^^
16927db96d56Sopenharmony_ci
16937db96d56Sopenharmony_ciThe callback function should raise :exc:`OptionValueError` if there are any
16947db96d56Sopenharmony_ciproblems with the option or its argument(s).  :mod:`optparse` catches this and
16957db96d56Sopenharmony_citerminates the program, printing the error message you supply to stderr.  Your
16967db96d56Sopenharmony_cimessage should be clear, concise, accurate, and mention the option at fault.
16977db96d56Sopenharmony_ciOtherwise, the user will have a hard time figuring out what they did wrong.
16987db96d56Sopenharmony_ci
16997db96d56Sopenharmony_ci
17007db96d56Sopenharmony_ci.. _optparse-callback-example-1:
17017db96d56Sopenharmony_ci
17027db96d56Sopenharmony_ciCallback example 1: trivial callback
17037db96d56Sopenharmony_ci^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
17047db96d56Sopenharmony_ci
17057db96d56Sopenharmony_ciHere's an example of a callback option that takes no arguments, and simply
17067db96d56Sopenharmony_cirecords that the option was seen::
17077db96d56Sopenharmony_ci
17087db96d56Sopenharmony_ci   def record_foo_seen(option, opt_str, value, parser):
17097db96d56Sopenharmony_ci       parser.values.saw_foo = True
17107db96d56Sopenharmony_ci
17117db96d56Sopenharmony_ci   parser.add_option("--foo", action="callback", callback=record_foo_seen)
17127db96d56Sopenharmony_ci
17137db96d56Sopenharmony_ciOf course, you could do that with the ``"store_true"`` action.
17147db96d56Sopenharmony_ci
17157db96d56Sopenharmony_ci
17167db96d56Sopenharmony_ci.. _optparse-callback-example-2:
17177db96d56Sopenharmony_ci
17187db96d56Sopenharmony_ciCallback example 2: check option order
17197db96d56Sopenharmony_ci^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
17207db96d56Sopenharmony_ci
17217db96d56Sopenharmony_ciHere's a slightly more interesting example: record the fact that ``-a`` is
17227db96d56Sopenharmony_ciseen, but blow up if it comes after ``-b`` in the command-line.  ::
17237db96d56Sopenharmony_ci
17247db96d56Sopenharmony_ci   def check_order(option, opt_str, value, parser):
17257db96d56Sopenharmony_ci       if parser.values.b:
17267db96d56Sopenharmony_ci           raise OptionValueError("can't use -a after -b")
17277db96d56Sopenharmony_ci       parser.values.a = 1
17287db96d56Sopenharmony_ci   ...
17297db96d56Sopenharmony_ci   parser.add_option("-a", action="callback", callback=check_order)
17307db96d56Sopenharmony_ci   parser.add_option("-b", action="store_true", dest="b")
17317db96d56Sopenharmony_ci
17327db96d56Sopenharmony_ci
17337db96d56Sopenharmony_ci.. _optparse-callback-example-3:
17347db96d56Sopenharmony_ci
17357db96d56Sopenharmony_ciCallback example 3: check option order (generalized)
17367db96d56Sopenharmony_ci^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
17377db96d56Sopenharmony_ci
17387db96d56Sopenharmony_ciIf you want to re-use this callback for several similar options (set a flag, but
17397db96d56Sopenharmony_ciblow up if ``-b`` has already been seen), it needs a bit of work: the error
17407db96d56Sopenharmony_cimessage and the flag that it sets must be generalized.  ::
17417db96d56Sopenharmony_ci
17427db96d56Sopenharmony_ci   def check_order(option, opt_str, value, parser):
17437db96d56Sopenharmony_ci       if parser.values.b:
17447db96d56Sopenharmony_ci           raise OptionValueError("can't use %s after -b" % opt_str)
17457db96d56Sopenharmony_ci       setattr(parser.values, option.dest, 1)
17467db96d56Sopenharmony_ci   ...
17477db96d56Sopenharmony_ci   parser.add_option("-a", action="callback", callback=check_order, dest='a')
17487db96d56Sopenharmony_ci   parser.add_option("-b", action="store_true", dest="b")
17497db96d56Sopenharmony_ci   parser.add_option("-c", action="callback", callback=check_order, dest='c')
17507db96d56Sopenharmony_ci
17517db96d56Sopenharmony_ci
17527db96d56Sopenharmony_ci.. _optparse-callback-example-4:
17537db96d56Sopenharmony_ci
17547db96d56Sopenharmony_ciCallback example 4: check arbitrary condition
17557db96d56Sopenharmony_ci^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
17567db96d56Sopenharmony_ci
17577db96d56Sopenharmony_ciOf course, you could put any condition in there---you're not limited to checking
17587db96d56Sopenharmony_cithe values of already-defined options.  For example, if you have options that
17597db96d56Sopenharmony_cishould not be called when the moon is full, all you have to do is this::
17607db96d56Sopenharmony_ci
17617db96d56Sopenharmony_ci   def check_moon(option, opt_str, value, parser):
17627db96d56Sopenharmony_ci       if is_moon_full():
17637db96d56Sopenharmony_ci           raise OptionValueError("%s option invalid when moon is full"
17647db96d56Sopenharmony_ci                                  % opt_str)
17657db96d56Sopenharmony_ci       setattr(parser.values, option.dest, 1)
17667db96d56Sopenharmony_ci   ...
17677db96d56Sopenharmony_ci   parser.add_option("--foo",
17687db96d56Sopenharmony_ci                     action="callback", callback=check_moon, dest="foo")
17697db96d56Sopenharmony_ci
17707db96d56Sopenharmony_ci(The definition of ``is_moon_full()`` is left as an exercise for the reader.)
17717db96d56Sopenharmony_ci
17727db96d56Sopenharmony_ci
17737db96d56Sopenharmony_ci.. _optparse-callback-example-5:
17747db96d56Sopenharmony_ci
17757db96d56Sopenharmony_ciCallback example 5: fixed arguments
17767db96d56Sopenharmony_ci^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
17777db96d56Sopenharmony_ci
17787db96d56Sopenharmony_ciThings get slightly more interesting when you define callback options that take
17797db96d56Sopenharmony_cia fixed number of arguments.  Specifying that a callback option takes arguments
17807db96d56Sopenharmony_ciis similar to defining a ``"store"`` or ``"append"`` option: if you define
17817db96d56Sopenharmony_ci:attr:`~Option.type`, then the option takes one argument that must be
17827db96d56Sopenharmony_ciconvertible to that type; if you further define :attr:`~Option.nargs`, then the
17837db96d56Sopenharmony_cioption takes :attr:`~Option.nargs` arguments.
17847db96d56Sopenharmony_ci
17857db96d56Sopenharmony_ciHere's an example that just emulates the standard ``"store"`` action::
17867db96d56Sopenharmony_ci
17877db96d56Sopenharmony_ci   def store_value(option, opt_str, value, parser):
17887db96d56Sopenharmony_ci       setattr(parser.values, option.dest, value)
17897db96d56Sopenharmony_ci   ...
17907db96d56Sopenharmony_ci   parser.add_option("--foo",
17917db96d56Sopenharmony_ci                     action="callback", callback=store_value,
17927db96d56Sopenharmony_ci                     type="int", nargs=3, dest="foo")
17937db96d56Sopenharmony_ci
17947db96d56Sopenharmony_ciNote that :mod:`optparse` takes care of consuming 3 arguments and converting
17957db96d56Sopenharmony_cithem to integers for you; all you have to do is store them.  (Or whatever;
17967db96d56Sopenharmony_ciobviously you don't need a callback for this example.)
17977db96d56Sopenharmony_ci
17987db96d56Sopenharmony_ci
17997db96d56Sopenharmony_ci.. _optparse-callback-example-6:
18007db96d56Sopenharmony_ci
18017db96d56Sopenharmony_ciCallback example 6: variable arguments
18027db96d56Sopenharmony_ci^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
18037db96d56Sopenharmony_ci
18047db96d56Sopenharmony_ciThings get hairy when you want an option to take a variable number of arguments.
18057db96d56Sopenharmony_ciFor this case, you must write a callback, as :mod:`optparse` doesn't provide any
18067db96d56Sopenharmony_cibuilt-in capabilities for it.  And you have to deal with certain intricacies of
18077db96d56Sopenharmony_ciconventional Unix command-line parsing that :mod:`optparse` normally handles for
18087db96d56Sopenharmony_ciyou.  In particular, callbacks should implement the conventional rules for bare
18097db96d56Sopenharmony_ci``--`` and ``-`` arguments:
18107db96d56Sopenharmony_ci
18117db96d56Sopenharmony_ci* either ``--`` or ``-`` can be option arguments
18127db96d56Sopenharmony_ci
18137db96d56Sopenharmony_ci* bare ``--`` (if not the argument to some option): halt command-line
18147db96d56Sopenharmony_ci  processing and discard the ``--``
18157db96d56Sopenharmony_ci
18167db96d56Sopenharmony_ci* bare ``-`` (if not the argument to some option): halt command-line
18177db96d56Sopenharmony_ci  processing but keep the ``-`` (append it to ``parser.largs``)
18187db96d56Sopenharmony_ci
18197db96d56Sopenharmony_ciIf you want an option that takes a variable number of arguments, there are
18207db96d56Sopenharmony_ciseveral subtle, tricky issues to worry about.  The exact implementation you
18217db96d56Sopenharmony_cichoose will be based on which trade-offs you're willing to make for your
18227db96d56Sopenharmony_ciapplication (which is why :mod:`optparse` doesn't support this sort of thing
18237db96d56Sopenharmony_cidirectly).
18247db96d56Sopenharmony_ci
18257db96d56Sopenharmony_ciNevertheless, here's a stab at a callback for an option with variable
18267db96d56Sopenharmony_ciarguments::
18277db96d56Sopenharmony_ci
18287db96d56Sopenharmony_ci    def vararg_callback(option, opt_str, value, parser):
18297db96d56Sopenharmony_ci        assert value is None
18307db96d56Sopenharmony_ci        value = []
18317db96d56Sopenharmony_ci
18327db96d56Sopenharmony_ci        def floatable(str):
18337db96d56Sopenharmony_ci            try:
18347db96d56Sopenharmony_ci                float(str)
18357db96d56Sopenharmony_ci                return True
18367db96d56Sopenharmony_ci            except ValueError:
18377db96d56Sopenharmony_ci                return False
18387db96d56Sopenharmony_ci
18397db96d56Sopenharmony_ci        for arg in parser.rargs:
18407db96d56Sopenharmony_ci            # stop on --foo like options
18417db96d56Sopenharmony_ci            if arg[:2] == "--" and len(arg) > 2:
18427db96d56Sopenharmony_ci                break
18437db96d56Sopenharmony_ci            # stop on -a, but not on -3 or -3.0
18447db96d56Sopenharmony_ci            if arg[:1] == "-" and len(arg) > 1 and not floatable(arg):
18457db96d56Sopenharmony_ci                break
18467db96d56Sopenharmony_ci            value.append(arg)
18477db96d56Sopenharmony_ci
18487db96d56Sopenharmony_ci        del parser.rargs[:len(value)]
18497db96d56Sopenharmony_ci        setattr(parser.values, option.dest, value)
18507db96d56Sopenharmony_ci
18517db96d56Sopenharmony_ci    ...
18527db96d56Sopenharmony_ci    parser.add_option("-c", "--callback", dest="vararg_attr",
18537db96d56Sopenharmony_ci                      action="callback", callback=vararg_callback)
18547db96d56Sopenharmony_ci
18557db96d56Sopenharmony_ci
18567db96d56Sopenharmony_ci.. _optparse-extending-optparse:
18577db96d56Sopenharmony_ci
18587db96d56Sopenharmony_ciExtending :mod:`optparse`
18597db96d56Sopenharmony_ci-------------------------
18607db96d56Sopenharmony_ci
18617db96d56Sopenharmony_ciSince the two major controlling factors in how :mod:`optparse` interprets
18627db96d56Sopenharmony_cicommand-line options are the action and type of each option, the most likely
18637db96d56Sopenharmony_cidirection of extension is to add new actions and new types.
18647db96d56Sopenharmony_ci
18657db96d56Sopenharmony_ci
18667db96d56Sopenharmony_ci.. _optparse-adding-new-types:
18677db96d56Sopenharmony_ci
18687db96d56Sopenharmony_ciAdding new types
18697db96d56Sopenharmony_ci^^^^^^^^^^^^^^^^
18707db96d56Sopenharmony_ci
18717db96d56Sopenharmony_ciTo add new types, you need to define your own subclass of :mod:`optparse`'s
18727db96d56Sopenharmony_ci:class:`Option` class.  This class has a couple of attributes that define
18737db96d56Sopenharmony_ci:mod:`optparse`'s types: :attr:`~Option.TYPES` and :attr:`~Option.TYPE_CHECKER`.
18747db96d56Sopenharmony_ci
18757db96d56Sopenharmony_ci.. attribute:: Option.TYPES
18767db96d56Sopenharmony_ci
18777db96d56Sopenharmony_ci   A tuple of type names; in your subclass, simply define a new tuple
18787db96d56Sopenharmony_ci   :attr:`TYPES` that builds on the standard one.
18797db96d56Sopenharmony_ci
18807db96d56Sopenharmony_ci.. attribute:: Option.TYPE_CHECKER
18817db96d56Sopenharmony_ci
18827db96d56Sopenharmony_ci   A dictionary mapping type names to type-checking functions.  A type-checking
18837db96d56Sopenharmony_ci   function has the following signature::
18847db96d56Sopenharmony_ci
18857db96d56Sopenharmony_ci      def check_mytype(option, opt, value)
18867db96d56Sopenharmony_ci
18877db96d56Sopenharmony_ci   where ``option`` is an :class:`Option` instance, ``opt`` is an option string
18887db96d56Sopenharmony_ci   (e.g., ``-f``), and ``value`` is the string from the command line that must
18897db96d56Sopenharmony_ci   be checked and converted to your desired type.  ``check_mytype()`` should
18907db96d56Sopenharmony_ci   return an object of the hypothetical type ``mytype``.  The value returned by
18917db96d56Sopenharmony_ci   a type-checking function will wind up in the OptionValues instance returned
18927db96d56Sopenharmony_ci   by :meth:`OptionParser.parse_args`, or be passed to a callback as the
18937db96d56Sopenharmony_ci   ``value`` parameter.
18947db96d56Sopenharmony_ci
18957db96d56Sopenharmony_ci   Your type-checking function should raise :exc:`OptionValueError` if it
18967db96d56Sopenharmony_ci   encounters any problems.  :exc:`OptionValueError` takes a single string
18977db96d56Sopenharmony_ci   argument, which is passed as-is to :class:`OptionParser`'s :meth:`error`
18987db96d56Sopenharmony_ci   method, which in turn prepends the program name and the string ``"error:"``
18997db96d56Sopenharmony_ci   and prints everything to stderr before terminating the process.
19007db96d56Sopenharmony_ci
19017db96d56Sopenharmony_ciHere's a silly example that demonstrates adding a ``"complex"`` option type to
19027db96d56Sopenharmony_ciparse Python-style complex numbers on the command line.  (This is even sillier
19037db96d56Sopenharmony_cithan it used to be, because :mod:`optparse` 1.3 added built-in support for
19047db96d56Sopenharmony_cicomplex numbers, but never mind.)
19057db96d56Sopenharmony_ci
19067db96d56Sopenharmony_ciFirst, the necessary imports::
19077db96d56Sopenharmony_ci
19087db96d56Sopenharmony_ci   from copy import copy
19097db96d56Sopenharmony_ci   from optparse import Option, OptionValueError
19107db96d56Sopenharmony_ci
19117db96d56Sopenharmony_ciYou need to define your type-checker first, since it's referred to later (in the
19127db96d56Sopenharmony_ci:attr:`~Option.TYPE_CHECKER` class attribute of your Option subclass)::
19137db96d56Sopenharmony_ci
19147db96d56Sopenharmony_ci   def check_complex(option, opt, value):
19157db96d56Sopenharmony_ci       try:
19167db96d56Sopenharmony_ci           return complex(value)
19177db96d56Sopenharmony_ci       except ValueError:
19187db96d56Sopenharmony_ci           raise OptionValueError(
19197db96d56Sopenharmony_ci               "option %s: invalid complex value: %r" % (opt, value))
19207db96d56Sopenharmony_ci
19217db96d56Sopenharmony_ciFinally, the Option subclass::
19227db96d56Sopenharmony_ci
19237db96d56Sopenharmony_ci   class MyOption (Option):
19247db96d56Sopenharmony_ci       TYPES = Option.TYPES + ("complex",)
19257db96d56Sopenharmony_ci       TYPE_CHECKER = copy(Option.TYPE_CHECKER)
19267db96d56Sopenharmony_ci       TYPE_CHECKER["complex"] = check_complex
19277db96d56Sopenharmony_ci
19287db96d56Sopenharmony_ci(If we didn't make a :func:`copy` of :attr:`Option.TYPE_CHECKER`, we would end
19297db96d56Sopenharmony_ciup modifying the :attr:`~Option.TYPE_CHECKER` attribute of :mod:`optparse`'s
19307db96d56Sopenharmony_ciOption class.  This being Python, nothing stops you from doing that except good
19317db96d56Sopenharmony_cimanners and common sense.)
19327db96d56Sopenharmony_ci
19337db96d56Sopenharmony_ciThat's it!  Now you can write a script that uses the new option type just like
19347db96d56Sopenharmony_ciany other :mod:`optparse`\ -based script, except you have to instruct your
19357db96d56Sopenharmony_ciOptionParser to use MyOption instead of Option::
19367db96d56Sopenharmony_ci
19377db96d56Sopenharmony_ci   parser = OptionParser(option_class=MyOption)
19387db96d56Sopenharmony_ci   parser.add_option("-c", type="complex")
19397db96d56Sopenharmony_ci
19407db96d56Sopenharmony_ciAlternately, you can build your own option list and pass it to OptionParser; if
19417db96d56Sopenharmony_ciyou don't use :meth:`add_option` in the above way, you don't need to tell
19427db96d56Sopenharmony_ciOptionParser which option class to use::
19437db96d56Sopenharmony_ci
19447db96d56Sopenharmony_ci   option_list = [MyOption("-c", action="store", type="complex", dest="c")]
19457db96d56Sopenharmony_ci   parser = OptionParser(option_list=option_list)
19467db96d56Sopenharmony_ci
19477db96d56Sopenharmony_ci
19487db96d56Sopenharmony_ci.. _optparse-adding-new-actions:
19497db96d56Sopenharmony_ci
19507db96d56Sopenharmony_ciAdding new actions
19517db96d56Sopenharmony_ci^^^^^^^^^^^^^^^^^^
19527db96d56Sopenharmony_ci
19537db96d56Sopenharmony_ciAdding new actions is a bit trickier, because you have to understand that
19547db96d56Sopenharmony_ci:mod:`optparse` has a couple of classifications for actions:
19557db96d56Sopenharmony_ci
19567db96d56Sopenharmony_ci"store" actions
19577db96d56Sopenharmony_ci   actions that result in :mod:`optparse` storing a value to an attribute of the
19587db96d56Sopenharmony_ci   current OptionValues instance; these options require a :attr:`~Option.dest`
19597db96d56Sopenharmony_ci   attribute to be supplied to the Option constructor.
19607db96d56Sopenharmony_ci
19617db96d56Sopenharmony_ci"typed" actions
19627db96d56Sopenharmony_ci   actions that take a value from the command line and expect it to be of a
19637db96d56Sopenharmony_ci   certain type; or rather, a string that can be converted to a certain type.
19647db96d56Sopenharmony_ci   These options require a :attr:`~Option.type` attribute to the Option
19657db96d56Sopenharmony_ci   constructor.
19667db96d56Sopenharmony_ci
19677db96d56Sopenharmony_ciThese are overlapping sets: some default "store" actions are ``"store"``,
19687db96d56Sopenharmony_ci``"store_const"``, ``"append"``, and ``"count"``, while the default "typed"
19697db96d56Sopenharmony_ciactions are ``"store"``, ``"append"``, and ``"callback"``.
19707db96d56Sopenharmony_ci
19717db96d56Sopenharmony_ciWhen you add an action, you need to categorize it by listing it in at least one
19727db96d56Sopenharmony_ciof the following class attributes of Option (all are lists of strings):
19737db96d56Sopenharmony_ci
19747db96d56Sopenharmony_ci.. attribute:: Option.ACTIONS
19757db96d56Sopenharmony_ci
19767db96d56Sopenharmony_ci   All actions must be listed in ACTIONS.
19777db96d56Sopenharmony_ci
19787db96d56Sopenharmony_ci.. attribute:: Option.STORE_ACTIONS
19797db96d56Sopenharmony_ci
19807db96d56Sopenharmony_ci   "store" actions are additionally listed here.
19817db96d56Sopenharmony_ci
19827db96d56Sopenharmony_ci.. attribute:: Option.TYPED_ACTIONS
19837db96d56Sopenharmony_ci
19847db96d56Sopenharmony_ci   "typed" actions are additionally listed here.
19857db96d56Sopenharmony_ci
19867db96d56Sopenharmony_ci.. attribute:: Option.ALWAYS_TYPED_ACTIONS
19877db96d56Sopenharmony_ci
19887db96d56Sopenharmony_ci   Actions that always take a type (i.e. whose options always take a value) are
19897db96d56Sopenharmony_ci   additionally listed here.  The only effect of this is that :mod:`optparse`
19907db96d56Sopenharmony_ci   assigns the default type, ``"string"``, to options with no explicit type
19917db96d56Sopenharmony_ci   whose action is listed in :attr:`ALWAYS_TYPED_ACTIONS`.
19927db96d56Sopenharmony_ci
19937db96d56Sopenharmony_ciIn order to actually implement your new action, you must override Option's
19947db96d56Sopenharmony_ci:meth:`take_action` method and add a case that recognizes your action.
19957db96d56Sopenharmony_ci
19967db96d56Sopenharmony_ciFor example, let's add an ``"extend"`` action.  This is similar to the standard
19977db96d56Sopenharmony_ci``"append"`` action, but instead of taking a single value from the command-line
19987db96d56Sopenharmony_ciand appending it to an existing list, ``"extend"`` will take multiple values in
19997db96d56Sopenharmony_cia single comma-delimited string, and extend an existing list with them.  That
20007db96d56Sopenharmony_ciis, if ``--names`` is an ``"extend"`` option of type ``"string"``, the command
20017db96d56Sopenharmony_ciline ::
20027db96d56Sopenharmony_ci
20037db96d56Sopenharmony_ci   --names=foo,bar --names blah --names ding,dong
20047db96d56Sopenharmony_ci
20057db96d56Sopenharmony_ciwould result in a list  ::
20067db96d56Sopenharmony_ci
20077db96d56Sopenharmony_ci   ["foo", "bar", "blah", "ding", "dong"]
20087db96d56Sopenharmony_ci
20097db96d56Sopenharmony_ciAgain we define a subclass of Option::
20107db96d56Sopenharmony_ci
20117db96d56Sopenharmony_ci   class MyOption(Option):
20127db96d56Sopenharmony_ci
20137db96d56Sopenharmony_ci       ACTIONS = Option.ACTIONS + ("extend",)
20147db96d56Sopenharmony_ci       STORE_ACTIONS = Option.STORE_ACTIONS + ("extend",)
20157db96d56Sopenharmony_ci       TYPED_ACTIONS = Option.TYPED_ACTIONS + ("extend",)
20167db96d56Sopenharmony_ci       ALWAYS_TYPED_ACTIONS = Option.ALWAYS_TYPED_ACTIONS + ("extend",)
20177db96d56Sopenharmony_ci
20187db96d56Sopenharmony_ci       def take_action(self, action, dest, opt, value, values, parser):
20197db96d56Sopenharmony_ci           if action == "extend":
20207db96d56Sopenharmony_ci               lvalue = value.split(",")
20217db96d56Sopenharmony_ci               values.ensure_value(dest, []).extend(lvalue)
20227db96d56Sopenharmony_ci           else:
20237db96d56Sopenharmony_ci               Option.take_action(
20247db96d56Sopenharmony_ci                   self, action, dest, opt, value, values, parser)
20257db96d56Sopenharmony_ci
20267db96d56Sopenharmony_ciFeatures of note:
20277db96d56Sopenharmony_ci
20287db96d56Sopenharmony_ci* ``"extend"`` both expects a value on the command-line and stores that value
20297db96d56Sopenharmony_ci  somewhere, so it goes in both :attr:`~Option.STORE_ACTIONS` and
20307db96d56Sopenharmony_ci  :attr:`~Option.TYPED_ACTIONS`.
20317db96d56Sopenharmony_ci
20327db96d56Sopenharmony_ci* to ensure that :mod:`optparse` assigns the default type of ``"string"`` to
20337db96d56Sopenharmony_ci  ``"extend"`` actions, we put the ``"extend"`` action in
20347db96d56Sopenharmony_ci  :attr:`~Option.ALWAYS_TYPED_ACTIONS` as well.
20357db96d56Sopenharmony_ci
20367db96d56Sopenharmony_ci* :meth:`MyOption.take_action` implements just this one new action, and passes
20377db96d56Sopenharmony_ci  control back to :meth:`Option.take_action` for the standard :mod:`optparse`
20387db96d56Sopenharmony_ci  actions.
20397db96d56Sopenharmony_ci
20407db96d56Sopenharmony_ci* ``values`` is an instance of the optparse_parser.Values class, which provides
20417db96d56Sopenharmony_ci  the very useful :meth:`ensure_value` method. :meth:`ensure_value` is
20427db96d56Sopenharmony_ci  essentially :func:`getattr` with a safety valve; it is called as ::
20437db96d56Sopenharmony_ci
20447db96d56Sopenharmony_ci     values.ensure_value(attr, value)
20457db96d56Sopenharmony_ci
20467db96d56Sopenharmony_ci  If the ``attr`` attribute of ``values`` doesn't exist or is ``None``, then
20477db96d56Sopenharmony_ci  ensure_value() first sets it to ``value``, and then returns 'value. This is
20487db96d56Sopenharmony_ci  very handy for actions like ``"extend"``, ``"append"``, and ``"count"``, all
20497db96d56Sopenharmony_ci  of which accumulate data in a variable and expect that variable to be of a
20507db96d56Sopenharmony_ci  certain type (a list for the first two, an integer for the latter).  Using
20517db96d56Sopenharmony_ci  :meth:`ensure_value` means that scripts using your action don't have to worry
20527db96d56Sopenharmony_ci  about setting a default value for the option destinations in question; they
20537db96d56Sopenharmony_ci  can just leave the default as ``None`` and :meth:`ensure_value` will take care of
20547db96d56Sopenharmony_ci  getting it right when it's needed.
20557db96d56Sopenharmony_ci
20567db96d56Sopenharmony_ciExceptions
20577db96d56Sopenharmony_ci----------
20587db96d56Sopenharmony_ci
20597db96d56Sopenharmony_ci.. exception:: OptionError
20607db96d56Sopenharmony_ci
20617db96d56Sopenharmony_ci   Raised if an :class:`Option` instance is created with invalid or
20627db96d56Sopenharmony_ci   inconsistent arguments.
20637db96d56Sopenharmony_ci
20647db96d56Sopenharmony_ci.. exception:: OptionConflictError
20657db96d56Sopenharmony_ci
20667db96d56Sopenharmony_ci   Raised if conflicting options are added to an :class:`OptionParser`.
20677db96d56Sopenharmony_ci
20687db96d56Sopenharmony_ci.. exception:: OptionValueError
20697db96d56Sopenharmony_ci
20707db96d56Sopenharmony_ci   Raised if an invalid option value is encountered on the command line.
20717db96d56Sopenharmony_ci
20727db96d56Sopenharmony_ci.. exception:: BadOptionError
20737db96d56Sopenharmony_ci
20747db96d56Sopenharmony_ci   Raised if an invalid option is passed on the command line.
20757db96d56Sopenharmony_ci
20767db96d56Sopenharmony_ci.. exception:: AmbiguousOptionError
20777db96d56Sopenharmony_ci
20787db96d56Sopenharmony_ci   Raised if an ambiguous option is passed on the command line.
2079