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