| Georg Brandl | 1d827ff | 2011-04-16 16:44:54 +0200 | [diff] [blame] | 1 | :mod:`argparse` --- Parser for command-line options, arguments and sub-commands | 
| Georg Brandl | e0bf91d | 2010-10-17 10:34:28 +0000 | [diff] [blame] | 2 | =============================================================================== | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 3 |  | 
 | 4 | .. module:: argparse | 
| Éric Araujo | d9d7bca | 2011-08-10 04:19:03 +0200 | [diff] [blame] | 5 |    :synopsis: Command-line option and argument parsing library. | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 6 | .. moduleauthor:: Steven Bethard <steven.bethard@gmail.com> | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 7 | .. sectionauthor:: Steven Bethard <steven.bethard@gmail.com> | 
 | 8 |  | 
| Raymond Hettinger | a199368 | 2011-01-27 01:20:32 +0000 | [diff] [blame] | 9 | .. versionadded:: 3.2 | 
 | 10 |  | 
| Éric Araujo | 19f9b71 | 2011-08-19 00:49:18 +0200 | [diff] [blame] | 11 | **Source code:** :source:`Lib/argparse.py` | 
 | 12 |  | 
| Raymond Hettinger | a199368 | 2011-01-27 01:20:32 +0000 | [diff] [blame] | 13 | -------------- | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 14 |  | 
| Ezio Melotti | 2409d77 | 2011-04-16 23:13:50 +0300 | [diff] [blame] | 15 | The :mod:`argparse` module makes it easy to write user-friendly command-line | 
| Benjamin Peterson | 98047eb | 2010-03-03 02:07:08 +0000 | [diff] [blame] | 16 | interfaces. The program defines what arguments it requires, and :mod:`argparse` | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 17 | will figure out how to parse those out of :data:`sys.argv`.  The :mod:`argparse` | 
| Benjamin Peterson | 98047eb | 2010-03-03 02:07:08 +0000 | [diff] [blame] | 18 | module also automatically generates help and usage messages and issues errors | 
 | 19 | when users give the program invalid arguments. | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 20 |  | 
| Georg Brandl | e0bf91d | 2010-10-17 10:34:28 +0000 | [diff] [blame] | 21 |  | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 22 | Example | 
 | 23 | ------- | 
 | 24 |  | 
| Benjamin Peterson | 98047eb | 2010-03-03 02:07:08 +0000 | [diff] [blame] | 25 | The following code is a Python program that takes a list of integers and | 
 | 26 | produces either the sum or the max:: | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 27 |  | 
 | 28 |    import argparse | 
 | 29 |  | 
 | 30 |    parser = argparse.ArgumentParser(description='Process some integers.') | 
 | 31 |    parser.add_argument('integers', metavar='N', type=int, nargs='+', | 
 | 32 |                       help='an integer for the accumulator') | 
 | 33 |    parser.add_argument('--sum', dest='accumulate', action='store_const', | 
 | 34 |                       const=sum, default=max, | 
 | 35 |                       help='sum the integers (default: find the max)') | 
 | 36 |  | 
 | 37 |    args = parser.parse_args() | 
| Benjamin Peterson | b2deb11 | 2010-03-03 02:09:18 +0000 | [diff] [blame] | 38 |    print(args.accumulate(args.integers)) | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 39 |  | 
 | 40 | Assuming the Python code above is saved into a file called ``prog.py``, it can | 
 | 41 | be run at the command line and provides useful help messages:: | 
 | 42 |  | 
 | 43 |    $ prog.py -h | 
 | 44 |    usage: prog.py [-h] [--sum] N [N ...] | 
 | 45 |  | 
 | 46 |    Process some integers. | 
 | 47 |  | 
 | 48 |    positional arguments: | 
 | 49 |     N           an integer for the accumulator | 
 | 50 |  | 
 | 51 |    optional arguments: | 
 | 52 |     -h, --help  show this help message and exit | 
 | 53 |     --sum       sum the integers (default: find the max) | 
 | 54 |  | 
 | 55 | When run with the appropriate arguments, it prints either the sum or the max of | 
 | 56 | the command-line integers:: | 
 | 57 |  | 
 | 58 |    $ prog.py 1 2 3 4 | 
 | 59 |    4 | 
 | 60 |  | 
 | 61 |    $ prog.py 1 2 3 4 --sum | 
 | 62 |    10 | 
 | 63 |  | 
 | 64 | If invalid arguments are passed in, it will issue an error:: | 
 | 65 |  | 
 | 66 |    $ prog.py a b c | 
 | 67 |    usage: prog.py [-h] [--sum] N [N ...] | 
 | 68 |    prog.py: error: argument N: invalid int value: 'a' | 
 | 69 |  | 
 | 70 | The following sections walk you through this example. | 
 | 71 |  | 
| Georg Brandl | e0bf91d | 2010-10-17 10:34:28 +0000 | [diff] [blame] | 72 |  | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 73 | Creating a parser | 
 | 74 | ^^^^^^^^^^^^^^^^^ | 
 | 75 |  | 
| Benjamin Peterson | 2614cda | 2010-03-21 22:36:19 +0000 | [diff] [blame] | 76 | The first step in using the :mod:`argparse` is creating an | 
| Benjamin Peterson | 98047eb | 2010-03-03 02:07:08 +0000 | [diff] [blame] | 77 | :class:`ArgumentParser` object:: | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 78 |  | 
 | 79 |    >>> parser = argparse.ArgumentParser(description='Process some integers.') | 
 | 80 |  | 
 | 81 | The :class:`ArgumentParser` object will hold all the information necessary to | 
| Ezio Melotti | cca4ef8 | 2011-04-21 15:26:46 +0300 | [diff] [blame] | 82 | parse the command line into Python data types. | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 83 |  | 
 | 84 |  | 
 | 85 | Adding arguments | 
 | 86 | ^^^^^^^^^^^^^^^^ | 
 | 87 |  | 
| Benjamin Peterson | 98047eb | 2010-03-03 02:07:08 +0000 | [diff] [blame] | 88 | Filling an :class:`ArgumentParser` with information about program arguments is | 
 | 89 | done by making calls to the :meth:`~ArgumentParser.add_argument` method. | 
 | 90 | Generally, these calls tell the :class:`ArgumentParser` how to take the strings | 
 | 91 | on the command line and turn them into objects.  This information is stored and | 
 | 92 | used when :meth:`~ArgumentParser.parse_args` is called. For example:: | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 93 |  | 
 | 94 |    >>> parser.add_argument('integers', metavar='N', type=int, nargs='+', | 
 | 95 |    ...                     help='an integer for the accumulator') | 
 | 96 |    >>> parser.add_argument('--sum', dest='accumulate', action='store_const', | 
 | 97 |    ...                     const=sum, default=max, | 
 | 98 |    ...                     help='sum the integers (default: find the max)') | 
 | 99 |  | 
| Ezio Melotti | 5569e9b | 2011-04-22 01:42:10 +0300 | [diff] [blame] | 100 | Later, calling :meth:`~ArgumentParser.parse_args` will return an object with | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 101 | two attributes, ``integers`` and ``accumulate``.  The ``integers`` attribute | 
 | 102 | will be a list of one or more ints, and the ``accumulate`` attribute will be | 
 | 103 | either the :func:`sum` function, if ``--sum`` was specified at the command line, | 
 | 104 | or the :func:`max` function if it was not. | 
 | 105 |  | 
| Georg Brandl | e0bf91d | 2010-10-17 10:34:28 +0000 | [diff] [blame] | 106 |  | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 107 | Parsing arguments | 
 | 108 | ^^^^^^^^^^^^^^^^^ | 
 | 109 |  | 
| Éric Araujo | d9d7bca | 2011-08-10 04:19:03 +0200 | [diff] [blame] | 110 | :class:`ArgumentParser` parses arguments through the | 
| Georg Brandl | 1d827ff | 2011-04-16 16:44:54 +0200 | [diff] [blame] | 111 | :meth:`~ArgumentParser.parse_args` method.  This will inspect the command line, | 
| Éric Araujo | fde9242 | 2011-08-19 01:30:26 +0200 | [diff] [blame] | 112 | convert each argument to the appropriate type and then invoke the appropriate action. | 
| Éric Araujo | 63b18a4 | 2011-07-29 17:59:17 +0200 | [diff] [blame] | 113 | In most cases, this means a simple :class:`Namespace` object will be built up from | 
| Georg Brandl | 1d827ff | 2011-04-16 16:44:54 +0200 | [diff] [blame] | 114 | attributes parsed out of the command line:: | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 115 |  | 
 | 116 |    >>> parser.parse_args(['--sum', '7', '-1', '42']) | 
 | 117 |    Namespace(accumulate=<built-in function sum>, integers=[7, -1, 42]) | 
 | 118 |  | 
| Benjamin Peterson | 98047eb | 2010-03-03 02:07:08 +0000 | [diff] [blame] | 119 | In a script, :meth:`~ArgumentParser.parse_args` will typically be called with no | 
 | 120 | arguments, and the :class:`ArgumentParser` will automatically determine the | 
| Éric Araujo | d9d7bca | 2011-08-10 04:19:03 +0200 | [diff] [blame] | 121 | command-line arguments from :data:`sys.argv`. | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 122 |  | 
 | 123 |  | 
 | 124 | ArgumentParser objects | 
 | 125 | ---------------------- | 
 | 126 |  | 
| Georg Brandl | c900708 | 2011-01-09 09:04:08 +0000 | [diff] [blame] | 127 | .. class:: ArgumentParser([description], [epilog], [prog], [usage], [add_help], \ | 
 | 128 |                           [argument_default], [parents], [prefix_chars], \ | 
 | 129 |                           [conflict_handler], [formatter_class]) | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 130 |  | 
 | 131 |    Create a new :class:`ArgumentParser` object.  Each parameter has its own more | 
 | 132 |    detailed description below, but in short they are: | 
 | 133 |  | 
 | 134 |    * description_ - Text to display before the argument help. | 
 | 135 |  | 
 | 136 |    * epilog_ - Text to display after the argument help. | 
 | 137 |  | 
| Benjamin Peterson | 98047eb | 2010-03-03 02:07:08 +0000 | [diff] [blame] | 138 |    * add_help_ - Add a -h/--help option to the parser. (default: ``True``) | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 139 |  | 
 | 140 |    * argument_default_ - Set the global default value for arguments. | 
| Benjamin Peterson | 98047eb | 2010-03-03 02:07:08 +0000 | [diff] [blame] | 141 |      (default: ``None``) | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 142 |  | 
| Benjamin Peterson | 98047eb | 2010-03-03 02:07:08 +0000 | [diff] [blame] | 143 |    * parents_ - A list of :class:`ArgumentParser` objects whose arguments should | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 144 |      also be included. | 
 | 145 |  | 
 | 146 |    * prefix_chars_ - The set of characters that prefix optional arguments. | 
 | 147 |      (default: '-') | 
 | 148 |  | 
 | 149 |    * fromfile_prefix_chars_ - The set of characters that prefix files from | 
| Benjamin Peterson | 98047eb | 2010-03-03 02:07:08 +0000 | [diff] [blame] | 150 |      which additional arguments should be read. (default: ``None``) | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 151 |  | 
 | 152 |    * formatter_class_ - A class for customizing the help output. | 
 | 153 |  | 
 | 154 |    * conflict_handler_ - Usually unnecessary, defines strategy for resolving | 
 | 155 |      conflicting optionals. | 
 | 156 |  | 
| Benjamin Peterson | 98047eb | 2010-03-03 02:07:08 +0000 | [diff] [blame] | 157 |    * prog_ - The name of the program (default: | 
| Éric Araujo | 37b5f9e | 2011-09-01 03:19:30 +0200 | [diff] [blame] | 158 |      ``sys.argv[0]``) | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 159 |  | 
| Benjamin Peterson | 98047eb | 2010-03-03 02:07:08 +0000 | [diff] [blame] | 160 |    * usage_ - The string describing the program usage (default: generated) | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 161 |  | 
| Benjamin Peterson | 98047eb | 2010-03-03 02:07:08 +0000 | [diff] [blame] | 162 | The following sections describe how each of these are used. | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 163 |  | 
 | 164 |  | 
 | 165 | description | 
 | 166 | ^^^^^^^^^^^ | 
 | 167 |  | 
| Benjamin Peterson | 98047eb | 2010-03-03 02:07:08 +0000 | [diff] [blame] | 168 | Most calls to the :class:`ArgumentParser` constructor will use the | 
 | 169 | ``description=`` keyword argument.  This argument gives a brief description of | 
 | 170 | what the program does and how it works.  In help messages, the description is | 
 | 171 | displayed between the command-line usage string and the help messages for the | 
 | 172 | various arguments:: | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 173 |  | 
 | 174 |    >>> parser = argparse.ArgumentParser(description='A foo that bars') | 
 | 175 |    >>> parser.print_help() | 
 | 176 |    usage: argparse.py [-h] | 
 | 177 |  | 
 | 178 |    A foo that bars | 
 | 179 |  | 
 | 180 |    optional arguments: | 
 | 181 |     -h, --help  show this help message and exit | 
 | 182 |  | 
 | 183 | By default, the description will be line-wrapped so that it fits within the | 
 | 184 | given space.  To change this behavior, see the formatter_class_ argument. | 
 | 185 |  | 
 | 186 |  | 
 | 187 | epilog | 
 | 188 | ^^^^^^ | 
 | 189 |  | 
 | 190 | Some programs like to display additional description of the program after the | 
 | 191 | description of the arguments.  Such text can be specified using the ``epilog=`` | 
 | 192 | argument to :class:`ArgumentParser`:: | 
 | 193 |  | 
 | 194 |    >>> parser = argparse.ArgumentParser( | 
 | 195 |    ...     description='A foo that bars', | 
 | 196 |    ...     epilog="And that's how you'd foo a bar") | 
 | 197 |    >>> parser.print_help() | 
 | 198 |    usage: argparse.py [-h] | 
 | 199 |  | 
 | 200 |    A foo that bars | 
 | 201 |  | 
 | 202 |    optional arguments: | 
 | 203 |     -h, --help  show this help message and exit | 
 | 204 |  | 
 | 205 |    And that's how you'd foo a bar | 
 | 206 |  | 
 | 207 | As with the description_ argument, the ``epilog=`` text is by default | 
 | 208 | line-wrapped, but this behavior can be adjusted with the formatter_class_ | 
| Benjamin Peterson | 98047eb | 2010-03-03 02:07:08 +0000 | [diff] [blame] | 209 | argument to :class:`ArgumentParser`. | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 210 |  | 
 | 211 |  | 
 | 212 | add_help | 
 | 213 | ^^^^^^^^ | 
 | 214 |  | 
| R. David Murray | 88c49fe | 2010-08-03 17:56:09 +0000 | [diff] [blame] | 215 | By default, ArgumentParser objects add an option which simply displays | 
 | 216 | the parser's help message. For example, consider a file named | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 217 | ``myprogram.py`` containing the following code:: | 
 | 218 |  | 
 | 219 |    import argparse | 
 | 220 |    parser = argparse.ArgumentParser() | 
 | 221 |    parser.add_argument('--foo', help='foo help') | 
 | 222 |    args = parser.parse_args() | 
 | 223 |  | 
| Georg Brandl | 1d827ff | 2011-04-16 16:44:54 +0200 | [diff] [blame] | 224 | If ``-h`` or ``--help`` is supplied at the command line, the ArgumentParser | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 225 | help will be printed:: | 
 | 226 |  | 
 | 227 |    $ python myprogram.py --help | 
 | 228 |    usage: myprogram.py [-h] [--foo FOO] | 
 | 229 |  | 
 | 230 |    optional arguments: | 
 | 231 |     -h, --help  show this help message and exit | 
 | 232 |     --foo FOO   foo help | 
 | 233 |  | 
 | 234 | Occasionally, it may be useful to disable the addition of this help option. | 
 | 235 | This can be achieved by passing ``False`` as the ``add_help=`` argument to | 
| Benjamin Peterson | 98047eb | 2010-03-03 02:07:08 +0000 | [diff] [blame] | 236 | :class:`ArgumentParser`:: | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 237 |  | 
 | 238 |    >>> parser = argparse.ArgumentParser(prog='PROG', add_help=False) | 
 | 239 |    >>> parser.add_argument('--foo', help='foo help') | 
 | 240 |    >>> parser.print_help() | 
 | 241 |    usage: PROG [--foo FOO] | 
 | 242 |  | 
 | 243 |    optional arguments: | 
 | 244 |     --foo FOO  foo help | 
 | 245 |  | 
| R. David Murray | 88c49fe | 2010-08-03 17:56:09 +0000 | [diff] [blame] | 246 | The help option is typically ``-h/--help``. The exception to this is | 
| Éric Araujo | 543edbd | 2011-08-19 01:45:12 +0200 | [diff] [blame] | 247 | if the ``prefix_chars=`` is specified and does not include ``-``, in | 
| R. David Murray | 88c49fe | 2010-08-03 17:56:09 +0000 | [diff] [blame] | 248 | which case ``-h`` and ``--help`` are not valid options.  In | 
 | 249 | this case, the first character in ``prefix_chars`` is used to prefix | 
 | 250 | the help options:: | 
 | 251 |  | 
 | 252 |    >>> parser = argparse.ArgumentParser(prog='PROG', prefix_chars='+/') | 
 | 253 |    >>> parser.print_help() | 
 | 254 |    usage: PROG [+h] | 
 | 255 |  | 
 | 256 |    optional arguments: | 
 | 257 |      +h, ++help  show this help message and exit | 
 | 258 |  | 
 | 259 |  | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 260 | prefix_chars | 
 | 261 | ^^^^^^^^^^^^ | 
 | 262 |  | 
| Éric Araujo | 543edbd | 2011-08-19 01:45:12 +0200 | [diff] [blame] | 263 | Most command-line options will use ``-`` as the prefix, e.g. ``-f/--foo``. | 
| R. David Murray | 88c49fe | 2010-08-03 17:56:09 +0000 | [diff] [blame] | 264 | Parsers that need to support different or additional prefix | 
 | 265 | characters, e.g. for options | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 266 | like ``+f`` or ``/foo``, may specify them using the ``prefix_chars=`` argument | 
 | 267 | to the ArgumentParser constructor:: | 
 | 268 |  | 
 | 269 |    >>> parser = argparse.ArgumentParser(prog='PROG', prefix_chars='-+') | 
 | 270 |    >>> parser.add_argument('+f') | 
 | 271 |    >>> parser.add_argument('++bar') | 
 | 272 |    >>> parser.parse_args('+f X ++bar Y'.split()) | 
 | 273 |    Namespace(bar='Y', f='X') | 
 | 274 |  | 
 | 275 | The ``prefix_chars=`` argument defaults to ``'-'``. Supplying a set of | 
| Éric Araujo | 543edbd | 2011-08-19 01:45:12 +0200 | [diff] [blame] | 276 | characters that does not include ``-`` will cause ``-f/--foo`` options to be | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 277 | disallowed. | 
 | 278 |  | 
 | 279 |  | 
 | 280 | fromfile_prefix_chars | 
 | 281 | ^^^^^^^^^^^^^^^^^^^^^ | 
 | 282 |  | 
| Benjamin Peterson | 98047eb | 2010-03-03 02:07:08 +0000 | [diff] [blame] | 283 | Sometimes, for example when dealing with a particularly long argument lists, it | 
 | 284 | may make sense to keep the list of arguments in a file rather than typing it out | 
 | 285 | at the command line.  If the ``fromfile_prefix_chars=`` argument is given to the | 
 | 286 | :class:`ArgumentParser` constructor, then arguments that start with any of the | 
 | 287 | specified characters will be treated as files, and will be replaced by the | 
 | 288 | arguments they contain.  For example:: | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 289 |  | 
| Benjamin Peterson | 98047eb | 2010-03-03 02:07:08 +0000 | [diff] [blame] | 290 |    >>> with open('args.txt', 'w') as fp: | 
 | 291 |    ...    fp.write('-f\nbar') | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 292 |    >>> parser = argparse.ArgumentParser(fromfile_prefix_chars='@') | 
 | 293 |    >>> parser.add_argument('-f') | 
 | 294 |    >>> parser.parse_args(['-f', 'foo', '@args.txt']) | 
 | 295 |    Namespace(f='bar') | 
 | 296 |  | 
 | 297 | Arguments read from a file must by default be one per line (but see also | 
| Ezio Melotti | 5569e9b | 2011-04-22 01:42:10 +0300 | [diff] [blame] | 298 | :meth:`~ArgumentParser.convert_arg_line_to_args`) and are treated as if they | 
 | 299 | were in the same place as the original file referencing argument on the command | 
 | 300 | line.  So in the example above, the expression ``['-f', 'foo', '@args.txt']`` | 
 | 301 | is considered equivalent to the expression ``['-f', 'foo', '-f', 'bar']``. | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 302 |  | 
 | 303 | The ``fromfile_prefix_chars=`` argument defaults to ``None``, meaning that | 
 | 304 | arguments will never be treated as file references. | 
 | 305 |  | 
| Georg Brandl | e0bf91d | 2010-10-17 10:34:28 +0000 | [diff] [blame] | 306 |  | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 307 | argument_default | 
 | 308 | ^^^^^^^^^^^^^^^^ | 
 | 309 |  | 
 | 310 | Generally, argument defaults are specified either by passing a default to | 
| Ezio Melotti | 5569e9b | 2011-04-22 01:42:10 +0300 | [diff] [blame] | 311 | :meth:`~ArgumentParser.add_argument` or by calling the | 
 | 312 | :meth:`~ArgumentParser.set_defaults` methods with a specific set of name-value | 
 | 313 | pairs.  Sometimes however, it may be useful to specify a single parser-wide | 
 | 314 | default for arguments.  This can be accomplished by passing the | 
 | 315 | ``argument_default=`` keyword argument to :class:`ArgumentParser`.  For example, | 
 | 316 | to globally suppress attribute creation on :meth:`~ArgumentParser.parse_args` | 
| Benjamin Peterson | 98047eb | 2010-03-03 02:07:08 +0000 | [diff] [blame] | 317 | calls, we supply ``argument_default=SUPPRESS``:: | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 318 |  | 
 | 319 |    >>> parser = argparse.ArgumentParser(argument_default=argparse.SUPPRESS) | 
 | 320 |    >>> parser.add_argument('--foo') | 
 | 321 |    >>> parser.add_argument('bar', nargs='?') | 
 | 322 |    >>> parser.parse_args(['--foo', '1', 'BAR']) | 
 | 323 |    Namespace(bar='BAR', foo='1') | 
 | 324 |    >>> parser.parse_args([]) | 
 | 325 |    Namespace() | 
 | 326 |  | 
 | 327 |  | 
 | 328 | parents | 
 | 329 | ^^^^^^^ | 
 | 330 |  | 
 | 331 | Sometimes, several parsers share a common set of arguments. Rather than | 
| Benjamin Peterson | 98047eb | 2010-03-03 02:07:08 +0000 | [diff] [blame] | 332 | repeating the definitions of these arguments, a single parser with all the | 
 | 333 | shared arguments and passed to ``parents=`` argument to :class:`ArgumentParser` | 
 | 334 | can be used.  The ``parents=`` argument takes a list of :class:`ArgumentParser` | 
 | 335 | objects, collects all the positional and optional actions from them, and adds | 
 | 336 | these actions to the :class:`ArgumentParser` object being constructed:: | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 337 |  | 
 | 338 |    >>> parent_parser = argparse.ArgumentParser(add_help=False) | 
 | 339 |    >>> parent_parser.add_argument('--parent', type=int) | 
 | 340 |  | 
 | 341 |    >>> foo_parser = argparse.ArgumentParser(parents=[parent_parser]) | 
 | 342 |    >>> foo_parser.add_argument('foo') | 
 | 343 |    >>> foo_parser.parse_args(['--parent', '2', 'XXX']) | 
 | 344 |    Namespace(foo='XXX', parent=2) | 
 | 345 |  | 
 | 346 |    >>> bar_parser = argparse.ArgumentParser(parents=[parent_parser]) | 
 | 347 |    >>> bar_parser.add_argument('--bar') | 
 | 348 |    >>> bar_parser.parse_args(['--bar', 'YYY']) | 
 | 349 |    Namespace(bar='YYY', parent=None) | 
 | 350 |  | 
 | 351 | Note that most parent parsers will specify ``add_help=False``.  Otherwise, the | 
| Benjamin Peterson | 98047eb | 2010-03-03 02:07:08 +0000 | [diff] [blame] | 352 | :class:`ArgumentParser` will see two ``-h/--help`` options (one in the parent | 
 | 353 | and one in the child) and raise an error. | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 354 |  | 
| Steven Bethard | d186f99 | 2011-03-26 21:49:00 +0100 | [diff] [blame] | 355 | .. note:: | 
 | 356 |    You must fully initialize the parsers before passing them via ``parents=``. | 
 | 357 |    If you change the parent parsers after the child parser, those changes will | 
 | 358 |    not be reflected in the child. | 
 | 359 |  | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 360 |  | 
 | 361 | formatter_class | 
 | 362 | ^^^^^^^^^^^^^^^ | 
 | 363 |  | 
| Benjamin Peterson | 98047eb | 2010-03-03 02:07:08 +0000 | [diff] [blame] | 364 | :class:`ArgumentParser` objects allow the help formatting to be customized by | 
 | 365 | specifying an alternate formatting class.  Currently, there are three such | 
| Ezio Melotti | 5569e9b | 2011-04-22 01:42:10 +0300 | [diff] [blame] | 366 | classes: | 
 | 367 |  | 
 | 368 | .. class:: RawDescriptionHelpFormatter | 
 | 369 |            RawTextHelpFormatter | 
 | 370 |            ArgumentDefaultsHelpFormatter | 
 | 371 |  | 
 | 372 | The first two allow more control over how textual descriptions are displayed, | 
 | 373 | while the last automatically adds information about argument default values. | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 374 |  | 
| Benjamin Peterson | 98047eb | 2010-03-03 02:07:08 +0000 | [diff] [blame] | 375 | By default, :class:`ArgumentParser` objects line-wrap the description_ and | 
 | 376 | epilog_ texts in command-line help messages:: | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 377 |  | 
 | 378 |    >>> parser = argparse.ArgumentParser( | 
 | 379 |    ...     prog='PROG', | 
 | 380 |    ...     description='''this description | 
 | 381 |    ...         was indented weird | 
 | 382 |    ...             but that is okay''', | 
 | 383 |    ...     epilog=''' | 
 | 384 |    ...             likewise for this epilog whose whitespace will | 
 | 385 |    ...         be cleaned up and whose words will be wrapped | 
 | 386 |    ...         across a couple lines''') | 
 | 387 |    >>> parser.print_help() | 
 | 388 |    usage: PROG [-h] | 
 | 389 |  | 
 | 390 |    this description was indented weird but that is okay | 
 | 391 |  | 
 | 392 |    optional arguments: | 
 | 393 |     -h, --help  show this help message and exit | 
 | 394 |  | 
 | 395 |    likewise for this epilog whose whitespace will be cleaned up and whose words | 
 | 396 |    will be wrapped across a couple lines | 
 | 397 |  | 
| Éric Araujo | 543edbd | 2011-08-19 01:45:12 +0200 | [diff] [blame] | 398 | Passing :class:`RawDescriptionHelpFormatter` as ``formatter_class=`` | 
| Benjamin Peterson | 98047eb | 2010-03-03 02:07:08 +0000 | [diff] [blame] | 399 | indicates that description_ and epilog_ are already correctly formatted and | 
 | 400 | should not be line-wrapped:: | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 401 |  | 
 | 402 |    >>> parser = argparse.ArgumentParser( | 
 | 403 |    ...     prog='PROG', | 
 | 404 |    ...     formatter_class=argparse.RawDescriptionHelpFormatter, | 
 | 405 |    ...     description=textwrap.dedent('''\ | 
 | 406 |    ...         Please do not mess up this text! | 
 | 407 |    ...         -------------------------------- | 
 | 408 |    ...             I have indented it | 
 | 409 |    ...             exactly the way | 
 | 410 |    ...             I want it | 
 | 411 |    ...         ''')) | 
 | 412 |    >>> parser.print_help() | 
 | 413 |    usage: PROG [-h] | 
 | 414 |  | 
 | 415 |    Please do not mess up this text! | 
 | 416 |    -------------------------------- | 
 | 417 |       I have indented it | 
 | 418 |       exactly the way | 
 | 419 |       I want it | 
 | 420 |  | 
 | 421 |    optional arguments: | 
 | 422 |     -h, --help  show this help message and exit | 
 | 423 |  | 
| Éric Araujo | 543edbd | 2011-08-19 01:45:12 +0200 | [diff] [blame] | 424 | :class:`RawTextHelpFormatter` maintains whitespace for all sorts of help text, | 
| Benjamin Peterson | 98047eb | 2010-03-03 02:07:08 +0000 | [diff] [blame] | 425 | including argument descriptions. | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 426 |  | 
| Benjamin Peterson | 98047eb | 2010-03-03 02:07:08 +0000 | [diff] [blame] | 427 | The other formatter class available, :class:`ArgumentDefaultsHelpFormatter`, | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 428 | will add information about the default value of each of the arguments:: | 
 | 429 |  | 
 | 430 |    >>> parser = argparse.ArgumentParser( | 
 | 431 |    ...     prog='PROG', | 
 | 432 |    ...     formatter_class=argparse.ArgumentDefaultsHelpFormatter) | 
 | 433 |    >>> parser.add_argument('--foo', type=int, default=42, help='FOO!') | 
 | 434 |    >>> parser.add_argument('bar', nargs='*', default=[1, 2, 3], help='BAR!') | 
 | 435 |    >>> parser.print_help() | 
 | 436 |    usage: PROG [-h] [--foo FOO] [bar [bar ...]] | 
 | 437 |  | 
 | 438 |    positional arguments: | 
 | 439 |     bar         BAR! (default: [1, 2, 3]) | 
 | 440 |  | 
 | 441 |    optional arguments: | 
 | 442 |     -h, --help  show this help message and exit | 
 | 443 |     --foo FOO   FOO! (default: 42) | 
 | 444 |  | 
 | 445 |  | 
 | 446 | conflict_handler | 
 | 447 | ^^^^^^^^^^^^^^^^ | 
 | 448 |  | 
| Benjamin Peterson | 98047eb | 2010-03-03 02:07:08 +0000 | [diff] [blame] | 449 | :class:`ArgumentParser` objects do not allow two actions with the same option | 
 | 450 | string.  By default, :class:`ArgumentParser` objects raises an exception if an | 
 | 451 | attempt is made to create an argument with an option string that is already in | 
 | 452 | use:: | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 453 |  | 
 | 454 |    >>> parser = argparse.ArgumentParser(prog='PROG') | 
 | 455 |    >>> parser.add_argument('-f', '--foo', help='old foo help') | 
 | 456 |    >>> parser.add_argument('--foo', help='new foo help') | 
 | 457 |    Traceback (most recent call last): | 
 | 458 |     .. | 
 | 459 |    ArgumentError: argument --foo: conflicting option string(s): --foo | 
 | 460 |  | 
 | 461 | Sometimes (e.g. when using parents_) it may be useful to simply override any | 
 | 462 | older arguments with the same option string.  To get this behavior, the value | 
 | 463 | ``'resolve'`` can be supplied to the ``conflict_handler=`` argument of | 
| Benjamin Peterson | 98047eb | 2010-03-03 02:07:08 +0000 | [diff] [blame] | 464 | :class:`ArgumentParser`:: | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 465 |  | 
 | 466 |    >>> parser = argparse.ArgumentParser(prog='PROG', conflict_handler='resolve') | 
 | 467 |    >>> parser.add_argument('-f', '--foo', help='old foo help') | 
 | 468 |    >>> parser.add_argument('--foo', help='new foo help') | 
 | 469 |    >>> parser.print_help() | 
 | 470 |    usage: PROG [-h] [-f FOO] [--foo FOO] | 
 | 471 |  | 
 | 472 |    optional arguments: | 
 | 473 |     -h, --help  show this help message and exit | 
 | 474 |     -f FOO      old foo help | 
 | 475 |     --foo FOO   new foo help | 
 | 476 |  | 
| Benjamin Peterson | 98047eb | 2010-03-03 02:07:08 +0000 | [diff] [blame] | 477 | Note that :class:`ArgumentParser` objects only remove an action if all of its | 
 | 478 | option strings are overridden.  So, in the example above, the old ``-f/--foo`` | 
 | 479 | action is retained as the ``-f`` action, because only the ``--foo`` option | 
 | 480 | string was overridden. | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 481 |  | 
 | 482 |  | 
 | 483 | prog | 
 | 484 | ^^^^ | 
 | 485 |  | 
| Benjamin Peterson | 98047eb | 2010-03-03 02:07:08 +0000 | [diff] [blame] | 486 | By default, :class:`ArgumentParser` objects uses ``sys.argv[0]`` to determine | 
 | 487 | how to display the name of the program in help messages.  This default is almost | 
| Ezio Melotti | f82340d | 2010-05-27 22:38:16 +0000 | [diff] [blame] | 488 | always desirable because it will make the help messages match how the program was | 
| Benjamin Peterson | 98047eb | 2010-03-03 02:07:08 +0000 | [diff] [blame] | 489 | invoked on the command line.  For example, consider a file named | 
 | 490 | ``myprogram.py`` with the following code:: | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 491 |  | 
 | 492 |    import argparse | 
 | 493 |    parser = argparse.ArgumentParser() | 
 | 494 |    parser.add_argument('--foo', help='foo help') | 
 | 495 |    args = parser.parse_args() | 
 | 496 |  | 
 | 497 | The help for this program will display ``myprogram.py`` as the program name | 
 | 498 | (regardless of where the program was invoked from):: | 
 | 499 |  | 
 | 500 |    $ python myprogram.py --help | 
 | 501 |    usage: myprogram.py [-h] [--foo FOO] | 
 | 502 |  | 
 | 503 |    optional arguments: | 
 | 504 |     -h, --help  show this help message and exit | 
 | 505 |     --foo FOO   foo help | 
 | 506 |    $ cd .. | 
 | 507 |    $ python subdir\myprogram.py --help | 
 | 508 |    usage: myprogram.py [-h] [--foo FOO] | 
 | 509 |  | 
 | 510 |    optional arguments: | 
 | 511 |     -h, --help  show this help message and exit | 
 | 512 |     --foo FOO   foo help | 
 | 513 |  | 
 | 514 | To change this default behavior, another value can be supplied using the | 
| Benjamin Peterson | 98047eb | 2010-03-03 02:07:08 +0000 | [diff] [blame] | 515 | ``prog=`` argument to :class:`ArgumentParser`:: | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 516 |  | 
 | 517 |    >>> parser = argparse.ArgumentParser(prog='myprogram') | 
 | 518 |    >>> parser.print_help() | 
 | 519 |    usage: myprogram [-h] | 
 | 520 |  | 
 | 521 |    optional arguments: | 
 | 522 |     -h, --help  show this help message and exit | 
 | 523 |  | 
 | 524 | Note that the program name, whether determined from ``sys.argv[0]`` or from the | 
 | 525 | ``prog=`` argument, is available to help messages using the ``%(prog)s`` format | 
 | 526 | specifier. | 
 | 527 |  | 
 | 528 | :: | 
 | 529 |  | 
 | 530 |    >>> parser = argparse.ArgumentParser(prog='myprogram') | 
 | 531 |    >>> parser.add_argument('--foo', help='foo of the %(prog)s program') | 
 | 532 |    >>> parser.print_help() | 
 | 533 |    usage: myprogram [-h] [--foo FOO] | 
 | 534 |  | 
 | 535 |    optional arguments: | 
 | 536 |     -h, --help  show this help message and exit | 
 | 537 |     --foo FOO   foo of the myprogram program | 
 | 538 |  | 
 | 539 |  | 
 | 540 | usage | 
 | 541 | ^^^^^ | 
 | 542 |  | 
| Benjamin Peterson | 98047eb | 2010-03-03 02:07:08 +0000 | [diff] [blame] | 543 | By default, :class:`ArgumentParser` calculates the usage message from the | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 544 | arguments it contains:: | 
 | 545 |  | 
 | 546 |    >>> parser = argparse.ArgumentParser(prog='PROG') | 
 | 547 |    >>> parser.add_argument('--foo', nargs='?', help='foo help') | 
 | 548 |    >>> parser.add_argument('bar', nargs='+', help='bar help') | 
 | 549 |    >>> parser.print_help() | 
 | 550 |    usage: PROG [-h] [--foo [FOO]] bar [bar ...] | 
 | 551 |  | 
 | 552 |    positional arguments: | 
 | 553 |     bar          bar help | 
 | 554 |  | 
 | 555 |    optional arguments: | 
 | 556 |     -h, --help   show this help message and exit | 
 | 557 |     --foo [FOO]  foo help | 
 | 558 |  | 
| Benjamin Peterson | 98047eb | 2010-03-03 02:07:08 +0000 | [diff] [blame] | 559 | The default message can be overridden with the ``usage=`` keyword argument:: | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 560 |  | 
 | 561 |    >>> parser = argparse.ArgumentParser(prog='PROG', usage='%(prog)s [options]') | 
 | 562 |    >>> parser.add_argument('--foo', nargs='?', help='foo help') | 
 | 563 |    >>> parser.add_argument('bar', nargs='+', help='bar help') | 
 | 564 |    >>> parser.print_help() | 
 | 565 |    usage: PROG [options] | 
 | 566 |  | 
 | 567 |    positional arguments: | 
 | 568 |     bar          bar help | 
 | 569 |  | 
 | 570 |    optional arguments: | 
 | 571 |     -h, --help   show this help message and exit | 
 | 572 |     --foo [FOO]  foo help | 
 | 573 |  | 
| Benjamin Peterson | 98047eb | 2010-03-03 02:07:08 +0000 | [diff] [blame] | 574 | The ``%(prog)s`` format specifier is available to fill in the program name in | 
 | 575 | your usage messages. | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 576 |  | 
 | 577 |  | 
 | 578 | The add_argument() method | 
 | 579 | ------------------------- | 
 | 580 |  | 
| Georg Brandl | c900708 | 2011-01-09 09:04:08 +0000 | [diff] [blame] | 581 | .. method:: ArgumentParser.add_argument(name or flags..., [action], [nargs], \ | 
 | 582 |                            [const], [default], [type], [choices], [required], \ | 
 | 583 |                            [help], [metavar], [dest]) | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 584 |  | 
| Georg Brandl | 1d827ff | 2011-04-16 16:44:54 +0200 | [diff] [blame] | 585 |    Define how a single command-line argument should be parsed.  Each parameter | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 586 |    has its own more detailed description below, but in short they are: | 
 | 587 |  | 
 | 588 |    * `name or flags`_ - Either a name or a list of option strings, e.g. ``foo`` | 
| Ezio Melotti | dca309d | 2011-04-21 23:09:27 +0300 | [diff] [blame] | 589 |      or ``-f, --foo``. | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 590 |  | 
 | 591 |    * action_ - The basic type of action to be taken when this argument is | 
| Georg Brandl | 1d827ff | 2011-04-16 16:44:54 +0200 | [diff] [blame] | 592 |      encountered at the command line. | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 593 |  | 
 | 594 |    * nargs_ - The number of command-line arguments that should be consumed. | 
 | 595 |  | 
 | 596 |    * const_ - A constant value required by some action_ and nargs_ selections. | 
 | 597 |  | 
 | 598 |    * default_ - The value produced if the argument is absent from the | 
| Georg Brandl | 1d827ff | 2011-04-16 16:44:54 +0200 | [diff] [blame] | 599 |      command line. | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 600 |  | 
| Ezio Melotti | 2409d77 | 2011-04-16 23:13:50 +0300 | [diff] [blame] | 601 |    * type_ - The type to which the command-line argument should be converted. | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 602 |  | 
 | 603 |    * choices_ - A container of the allowable values for the argument. | 
 | 604 |  | 
 | 605 |    * required_ - Whether or not the command-line option may be omitted | 
 | 606 |      (optionals only). | 
 | 607 |  | 
 | 608 |    * help_ - A brief description of what the argument does. | 
 | 609 |  | 
 | 610 |    * metavar_ - A name for the argument in usage messages. | 
 | 611 |  | 
 | 612 |    * dest_ - The name of the attribute to be added to the object returned by | 
 | 613 |      :meth:`parse_args`. | 
 | 614 |  | 
| Benjamin Peterson | 98047eb | 2010-03-03 02:07:08 +0000 | [diff] [blame] | 615 | The following sections describe how each of these are used. | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 616 |  | 
| Georg Brandl | e0bf91d | 2010-10-17 10:34:28 +0000 | [diff] [blame] | 617 |  | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 618 | name or flags | 
 | 619 | ^^^^^^^^^^^^^ | 
 | 620 |  | 
| Ezio Melotti | 5569e9b | 2011-04-22 01:42:10 +0300 | [diff] [blame] | 621 | The :meth:`~ArgumentParser.add_argument` method must know whether an optional | 
 | 622 | argument, like ``-f`` or ``--foo``, or a positional argument, like a list of | 
 | 623 | filenames, is expected.  The first arguments passed to | 
 | 624 | :meth:`~ArgumentParser.add_argument` must therefore be either a series of | 
 | 625 | flags, or a simple argument name.  For example, an optional argument could | 
 | 626 | be created like:: | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 627 |  | 
 | 628 |    >>> parser.add_argument('-f', '--foo') | 
 | 629 |  | 
 | 630 | while a positional argument could be created like:: | 
 | 631 |  | 
 | 632 |    >>> parser.add_argument('bar') | 
 | 633 |  | 
| Ezio Melotti | 5569e9b | 2011-04-22 01:42:10 +0300 | [diff] [blame] | 634 | When :meth:`~ArgumentParser.parse_args` is called, optional arguments will be | 
 | 635 | identified by the ``-`` prefix, and the remaining arguments will be assumed to | 
 | 636 | be positional:: | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 637 |  | 
 | 638 |    >>> parser = argparse.ArgumentParser(prog='PROG') | 
 | 639 |    >>> parser.add_argument('-f', '--foo') | 
 | 640 |    >>> parser.add_argument('bar') | 
 | 641 |    >>> parser.parse_args(['BAR']) | 
 | 642 |    Namespace(bar='BAR', foo=None) | 
 | 643 |    >>> parser.parse_args(['BAR', '--foo', 'FOO']) | 
 | 644 |    Namespace(bar='BAR', foo='FOO') | 
 | 645 |    >>> parser.parse_args(['--foo', 'FOO']) | 
 | 646 |    usage: PROG [-h] [-f FOO] bar | 
 | 647 |    PROG: error: too few arguments | 
 | 648 |  | 
| Georg Brandl | e0bf91d | 2010-10-17 10:34:28 +0000 | [diff] [blame] | 649 |  | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 650 | action | 
 | 651 | ^^^^^^ | 
 | 652 |  | 
| Éric Araujo | d9d7bca | 2011-08-10 04:19:03 +0200 | [diff] [blame] | 653 | :class:`ArgumentParser` objects associate command-line arguments with actions.  These | 
 | 654 | actions can do just about anything with the command-line arguments associated with | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 655 | them, though most actions simply add an attribute to the object returned by | 
| Ezio Melotti | 5569e9b | 2011-04-22 01:42:10 +0300 | [diff] [blame] | 656 | :meth:`~ArgumentParser.parse_args`.  The ``action`` keyword argument specifies | 
| Éric Araujo | d9d7bca | 2011-08-10 04:19:03 +0200 | [diff] [blame] | 657 | how the command-line arguments should be handled. The supported actions are: | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 658 |  | 
 | 659 | * ``'store'`` - This just stores the argument's value.  This is the default | 
| Ezio Melotti | 2f1db7d | 2011-04-21 23:06:48 +0300 | [diff] [blame] | 660 |   action. For example:: | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 661 |  | 
 | 662 |     >>> parser = argparse.ArgumentParser() | 
 | 663 |     >>> parser.add_argument('--foo') | 
 | 664 |     >>> parser.parse_args('--foo 1'.split()) | 
 | 665 |     Namespace(foo='1') | 
 | 666 |  | 
 | 667 | * ``'store_const'`` - This stores the value specified by the const_ keyword | 
| Ezio Melotti | 2f1db7d | 2011-04-21 23:06:48 +0300 | [diff] [blame] | 668 |   argument.  (Note that the const_ keyword argument defaults to the rather | 
 | 669 |   unhelpful ``None``.)  The ``'store_const'`` action is most commonly used with | 
 | 670 |   optional arguments that specify some sort of flag.  For example:: | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 671 |  | 
 | 672 |     >>> parser = argparse.ArgumentParser() | 
 | 673 |     >>> parser.add_argument('--foo', action='store_const', const=42) | 
 | 674 |     >>> parser.parse_args('--foo'.split()) | 
 | 675 |     Namespace(foo=42) | 
 | 676 |  | 
 | 677 | * ``'store_true'`` and ``'store_false'`` - These store the values ``True`` and | 
| Benjamin Peterson | 98047eb | 2010-03-03 02:07:08 +0000 | [diff] [blame] | 678 |   ``False`` respectively.  These are special cases of ``'store_const'``.  For | 
 | 679 |   example:: | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 680 |  | 
 | 681 |     >>> parser = argparse.ArgumentParser() | 
 | 682 |     >>> parser.add_argument('--foo', action='store_true') | 
 | 683 |     >>> parser.add_argument('--bar', action='store_false') | 
 | 684 |     >>> parser.parse_args('--foo --bar'.split()) | 
 | 685 |     Namespace(bar=False, foo=True) | 
 | 686 |  | 
 | 687 | * ``'append'`` - This stores a list, and appends each argument value to the | 
| Benjamin Peterson | 98047eb | 2010-03-03 02:07:08 +0000 | [diff] [blame] | 688 |   list.  This is useful to allow an option to be specified multiple times. | 
 | 689 |   Example usage:: | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 690 |  | 
 | 691 |     >>> parser = argparse.ArgumentParser() | 
 | 692 |     >>> parser.add_argument('--foo', action='append') | 
 | 693 |     >>> parser.parse_args('--foo 1 --foo 2'.split()) | 
 | 694 |     Namespace(foo=['1', '2']) | 
 | 695 |  | 
 | 696 | * ``'append_const'`` - This stores a list, and appends the value specified by | 
| Benjamin Peterson | 98047eb | 2010-03-03 02:07:08 +0000 | [diff] [blame] | 697 |   the const_ keyword argument to the list.  (Note that the const_ keyword | 
 | 698 |   argument defaults to ``None``.)  The ``'append_const'`` action is typically | 
 | 699 |   useful when multiple arguments need to store constants to the same list. For | 
 | 700 |   example:: | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 701 |  | 
 | 702 |     >>> parser = argparse.ArgumentParser() | 
 | 703 |     >>> parser.add_argument('--str', dest='types', action='append_const', const=str) | 
 | 704 |     >>> parser.add_argument('--int', dest='types', action='append_const', const=int) | 
 | 705 |     >>> parser.parse_args('--str --int'.split()) | 
| Florent Xicluna | 74e6495 | 2011-10-28 11:21:19 +0200 | [diff] [blame] | 706 |     Namespace(types=[<class 'str'>, <class 'int'>]) | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 707 |  | 
| Sandro Tosi | 98492a5 | 2012-01-04 23:25:04 +0100 | [diff] [blame] | 708 | * ``'count'`` - This counts the number of times a keyword argument occurs. For | 
 | 709 |   example, this is useful for increasing verbosity levels:: | 
 | 710 |  | 
 | 711 |     >>> parser = argparse.ArgumentParser() | 
 | 712 |     >>> parser.add_argument('--verbose', '-v', action='count') | 
 | 713 |     >>> parser.parse_args('-vvv'.split()) | 
 | 714 |     Namespace(verbose=3) | 
 | 715 |  | 
 | 716 | * ``'help'`` - This prints a complete help message for all the options in the | 
 | 717 |   current parser and then exits. By default a help action is automatically | 
 | 718 |   added to the parser. See :class:`ArgumentParser` for details of how the | 
 | 719 |   output is created. | 
 | 720 |  | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 721 | * ``'version'`` - This expects a ``version=`` keyword argument in the | 
| Ezio Melotti | 5569e9b | 2011-04-22 01:42:10 +0300 | [diff] [blame] | 722 |   :meth:`~ArgumentParser.add_argument` call, and prints version information | 
 | 723 |   and exits when invoked. | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 724 |  | 
 | 725 |     >>> import argparse | 
 | 726 |     >>> parser = argparse.ArgumentParser(prog='PROG') | 
| Steven Bethard | 5971096 | 2010-05-24 03:21:08 +0000 | [diff] [blame] | 727 |     >>> parser.add_argument('--version', action='version', version='%(prog)s 2.0') | 
 | 728 |     >>> parser.parse_args(['--version']) | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 729 |     PROG 2.0 | 
 | 730 |  | 
 | 731 | You can also specify an arbitrary action by passing an object that implements | 
| Benjamin Peterson | 98047eb | 2010-03-03 02:07:08 +0000 | [diff] [blame] | 732 | the Action API.  The easiest way to do this is to extend | 
 | 733 | :class:`argparse.Action`, supplying an appropriate ``__call__`` method.  The | 
 | 734 | ``__call__`` method should accept four parameters: | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 735 |  | 
 | 736 | * ``parser`` - The ArgumentParser object which contains this action. | 
 | 737 |  | 
| Éric Araujo | 63b18a4 | 2011-07-29 17:59:17 +0200 | [diff] [blame] | 738 | * ``namespace`` - The :class:`Namespace` object that will be returned by | 
| Ezio Melotti | 5569e9b | 2011-04-22 01:42:10 +0300 | [diff] [blame] | 739 |   :meth:`~ArgumentParser.parse_args`.  Most actions add an attribute to this | 
 | 740 |   object. | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 741 |  | 
| Éric Araujo | d9d7bca | 2011-08-10 04:19:03 +0200 | [diff] [blame] | 742 | * ``values`` - The associated command-line arguments, with any type conversions | 
 | 743 |   applied.  (Type conversions are specified with the type_ keyword argument to | 
| Ezio Melotti | 5569e9b | 2011-04-22 01:42:10 +0300 | [diff] [blame] | 744 |   :meth:`~ArgumentParser.add_argument`. | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 745 |  | 
 | 746 | * ``option_string`` - The option string that was used to invoke this action. | 
 | 747 |   The ``option_string`` argument is optional, and will be absent if the action | 
 | 748 |   is associated with a positional argument. | 
 | 749 |  | 
| Benjamin Peterson | 98047eb | 2010-03-03 02:07:08 +0000 | [diff] [blame] | 750 | An example of a custom action:: | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 751 |  | 
 | 752 |    >>> class FooAction(argparse.Action): | 
 | 753 |    ...     def __call__(self, parser, namespace, values, option_string=None): | 
| Georg Brandl | 571a953 | 2010-07-26 17:00:20 +0000 | [diff] [blame] | 754 |    ...         print('%r %r %r' % (namespace, values, option_string)) | 
 | 755 |    ...         setattr(namespace, self.dest, values) | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 756 |    ... | 
 | 757 |    >>> parser = argparse.ArgumentParser() | 
 | 758 |    >>> parser.add_argument('--foo', action=FooAction) | 
 | 759 |    >>> parser.add_argument('bar', action=FooAction) | 
 | 760 |    >>> args = parser.parse_args('1 --foo 2'.split()) | 
 | 761 |    Namespace(bar=None, foo=None) '1' None | 
 | 762 |    Namespace(bar='1', foo=None) '2' '--foo' | 
 | 763 |    >>> args | 
 | 764 |    Namespace(bar='1', foo='2') | 
 | 765 |  | 
 | 766 |  | 
 | 767 | nargs | 
 | 768 | ^^^^^ | 
 | 769 |  | 
 | 770 | ArgumentParser objects usually associate a single command-line argument with a | 
| Benjamin Peterson | 98047eb | 2010-03-03 02:07:08 +0000 | [diff] [blame] | 771 | single action to be taken.  The ``nargs`` keyword argument associates a | 
| Ezio Melotti | 00f53af | 2011-04-21 22:56:51 +0300 | [diff] [blame] | 772 | different number of command-line arguments with a single action.  The supported | 
| Benjamin Peterson | 98047eb | 2010-03-03 02:07:08 +0000 | [diff] [blame] | 773 | values are: | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 774 |  | 
| Éric Araujo | 543edbd | 2011-08-19 01:45:12 +0200 | [diff] [blame] | 775 | * ``N`` (an integer).  ``N`` arguments from the command line will be gathered together into a | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 776 |   list.  For example:: | 
 | 777 |  | 
| Georg Brandl | 682d7e0 | 2010-10-06 10:26:05 +0000 | [diff] [blame] | 778 |      >>> parser = argparse.ArgumentParser() | 
 | 779 |      >>> parser.add_argument('--foo', nargs=2) | 
 | 780 |      >>> parser.add_argument('bar', nargs=1) | 
 | 781 |      >>> parser.parse_args('c --foo a b'.split()) | 
 | 782 |      Namespace(bar=['c'], foo=['a', 'b']) | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 783 |  | 
| Georg Brandl | 682d7e0 | 2010-10-06 10:26:05 +0000 | [diff] [blame] | 784 |   Note that ``nargs=1`` produces a list of one item.  This is different from | 
 | 785 |   the default, in which the item is produced by itself. | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 786 |  | 
| Éric Araujo | fde9242 | 2011-08-19 01:30:26 +0200 | [diff] [blame] | 787 | * ``'?'``. One argument will be consumed from the command line if possible, and | 
 | 788 |   produced as a single item.  If no command-line argument is present, the value from | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 789 |   default_ will be produced.  Note that for optional arguments, there is an | 
 | 790 |   additional case - the option string is present but not followed by a | 
| Éric Araujo | fde9242 | 2011-08-19 01:30:26 +0200 | [diff] [blame] | 791 |   command-line argument.  In this case the value from const_ will be produced.  Some | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 792 |   examples to illustrate this:: | 
 | 793 |  | 
 | 794 |      >>> parser = argparse.ArgumentParser() | 
 | 795 |      >>> parser.add_argument('--foo', nargs='?', const='c', default='d') | 
 | 796 |      >>> parser.add_argument('bar', nargs='?', default='d') | 
 | 797 |      >>> parser.parse_args('XX --foo YY'.split()) | 
 | 798 |      Namespace(bar='XX', foo='YY') | 
 | 799 |      >>> parser.parse_args('XX --foo'.split()) | 
 | 800 |      Namespace(bar='XX', foo='c') | 
 | 801 |      >>> parser.parse_args(''.split()) | 
 | 802 |      Namespace(bar='d', foo='d') | 
 | 803 |  | 
 | 804 |   One of the more common uses of ``nargs='?'`` is to allow optional input and | 
 | 805 |   output files:: | 
 | 806 |  | 
 | 807 |      >>> parser = argparse.ArgumentParser() | 
| Georg Brandl | e0bf91d | 2010-10-17 10:34:28 +0000 | [diff] [blame] | 808 |      >>> parser.add_argument('infile', nargs='?', type=argparse.FileType('r'), | 
 | 809 |      ...                     default=sys.stdin) | 
 | 810 |      >>> parser.add_argument('outfile', nargs='?', type=argparse.FileType('w'), | 
 | 811 |      ...                     default=sys.stdout) | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 812 |      >>> parser.parse_args(['input.txt', 'output.txt']) | 
| Georg Brandl | 04536b0 | 2011-01-09 09:31:01 +0000 | [diff] [blame] | 813 |      Namespace(infile=<_io.TextIOWrapper name='input.txt' encoding='UTF-8'>, | 
 | 814 |                outfile=<_io.TextIOWrapper name='output.txt' encoding='UTF-8'>) | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 815 |      >>> parser.parse_args([]) | 
| Georg Brandl | 04536b0 | 2011-01-09 09:31:01 +0000 | [diff] [blame] | 816 |      Namespace(infile=<_io.TextIOWrapper name='<stdin>' encoding='UTF-8'>, | 
 | 817 |                outfile=<_io.TextIOWrapper name='<stdout>' encoding='UTF-8'>) | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 818 |  | 
| Éric Araujo | d9d7bca | 2011-08-10 04:19:03 +0200 | [diff] [blame] | 819 | * ``'*'``.  All command-line arguments present are gathered into a list.  Note that | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 820 |   it generally doesn't make much sense to have more than one positional argument | 
 | 821 |   with ``nargs='*'``, but multiple optional arguments with ``nargs='*'`` is | 
 | 822 |   possible.  For example:: | 
 | 823 |  | 
 | 824 |      >>> parser = argparse.ArgumentParser() | 
 | 825 |      >>> parser.add_argument('--foo', nargs='*') | 
 | 826 |      >>> parser.add_argument('--bar', nargs='*') | 
 | 827 |      >>> parser.add_argument('baz', nargs='*') | 
 | 828 |      >>> parser.parse_args('a b --foo x y --bar 1 2'.split()) | 
 | 829 |      Namespace(bar=['1', '2'], baz=['a', 'b'], foo=['x', 'y']) | 
 | 830 |  | 
 | 831 | * ``'+'``. Just like ``'*'``, all command-line args present are gathered into a | 
 | 832 |   list.  Additionally, an error message will be generated if there wasn't at | 
| Éric Araujo | fde9242 | 2011-08-19 01:30:26 +0200 | [diff] [blame] | 833 |   least one command-line argument present.  For example:: | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 834 |  | 
 | 835 |      >>> parser = argparse.ArgumentParser(prog='PROG') | 
 | 836 |      >>> parser.add_argument('foo', nargs='+') | 
 | 837 |      >>> parser.parse_args('a b'.split()) | 
 | 838 |      Namespace(foo=['a', 'b']) | 
 | 839 |      >>> parser.parse_args(''.split()) | 
 | 840 |      usage: PROG [-h] foo [foo ...] | 
 | 841 |      PROG: error: too few arguments | 
 | 842 |  | 
| Éric Araujo | d9d7bca | 2011-08-10 04:19:03 +0200 | [diff] [blame] | 843 | If the ``nargs`` keyword argument is not provided, the number of arguments consumed | 
| Éric Araujo | fde9242 | 2011-08-19 01:30:26 +0200 | [diff] [blame] | 844 | is determined by the action_.  Generally this means a single command-line argument | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 845 | will be consumed and a single item (not a list) will be produced. | 
 | 846 |  | 
 | 847 |  | 
 | 848 | const | 
 | 849 | ^^^^^ | 
 | 850 |  | 
| Ezio Melotti | 5569e9b | 2011-04-22 01:42:10 +0300 | [diff] [blame] | 851 | The ``const`` argument of :meth:`~ArgumentParser.add_argument` is used to hold | 
 | 852 | constant values that are not read from the command line but are required for | 
 | 853 | the various :class:`ArgumentParser` actions.  The two most common uses of it are: | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 854 |  | 
| Ezio Melotti | 5569e9b | 2011-04-22 01:42:10 +0300 | [diff] [blame] | 855 | * When :meth:`~ArgumentParser.add_argument` is called with | 
 | 856 |   ``action='store_const'`` or ``action='append_const'``.  These actions add the | 
 | 857 |   ``const`` value to one of the attributes of the object returned by :meth:`~ArgumentParser.parse_args`. See the action_ description for examples. | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 858 |  | 
| Ezio Melotti | 5569e9b | 2011-04-22 01:42:10 +0300 | [diff] [blame] | 859 | * When :meth:`~ArgumentParser.add_argument` is called with option strings | 
 | 860 |   (like ``-f`` or ``--foo``) and ``nargs='?'``.  This creates an optional | 
| Éric Araujo | d9d7bca | 2011-08-10 04:19:03 +0200 | [diff] [blame] | 861 |   argument that can be followed by zero or one command-line arguments. | 
| Ezio Melotti | 5569e9b | 2011-04-22 01:42:10 +0300 | [diff] [blame] | 862 |   When parsing the command line, if the option string is encountered with no | 
| Éric Araujo | fde9242 | 2011-08-19 01:30:26 +0200 | [diff] [blame] | 863 |   command-line argument following it, the value of ``const`` will be assumed instead. | 
| Ezio Melotti | 5569e9b | 2011-04-22 01:42:10 +0300 | [diff] [blame] | 864 |   See the nargs_ description for examples. | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 865 |  | 
 | 866 | The ``const`` keyword argument defaults to ``None``. | 
 | 867 |  | 
 | 868 |  | 
 | 869 | default | 
 | 870 | ^^^^^^^ | 
 | 871 |  | 
 | 872 | All optional arguments and some positional arguments may be omitted at the | 
| Ezio Melotti | 5569e9b | 2011-04-22 01:42:10 +0300 | [diff] [blame] | 873 | command line.  The ``default`` keyword argument of | 
 | 874 | :meth:`~ArgumentParser.add_argument`, whose value defaults to ``None``, | 
| Éric Araujo | fde9242 | 2011-08-19 01:30:26 +0200 | [diff] [blame] | 875 | specifies what value should be used if the command-line argument is not present. | 
| Ezio Melotti | 5569e9b | 2011-04-22 01:42:10 +0300 | [diff] [blame] | 876 | For optional arguments, the ``default`` value is used when the option string | 
 | 877 | was not present at the command line:: | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 878 |  | 
 | 879 |    >>> parser = argparse.ArgumentParser() | 
 | 880 |    >>> parser.add_argument('--foo', default=42) | 
 | 881 |    >>> parser.parse_args('--foo 2'.split()) | 
 | 882 |    Namespace(foo='2') | 
 | 883 |    >>> parser.parse_args(''.split()) | 
 | 884 |    Namespace(foo=42) | 
 | 885 |  | 
| Éric Araujo | 543edbd | 2011-08-19 01:45:12 +0200 | [diff] [blame] | 886 | For positional arguments with nargs_ equal to ``?`` or ``*``, the ``default`` value | 
| Éric Araujo | fde9242 | 2011-08-19 01:30:26 +0200 | [diff] [blame] | 887 | is used when no command-line argument was present:: | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 888 |  | 
 | 889 |    >>> parser = argparse.ArgumentParser() | 
 | 890 |    >>> parser.add_argument('foo', nargs='?', default=42) | 
 | 891 |    >>> parser.parse_args('a'.split()) | 
 | 892 |    Namespace(foo='a') | 
 | 893 |    >>> parser.parse_args(''.split()) | 
 | 894 |    Namespace(foo=42) | 
 | 895 |  | 
 | 896 |  | 
| Benjamin Peterson | 98047eb | 2010-03-03 02:07:08 +0000 | [diff] [blame] | 897 | Providing ``default=argparse.SUPPRESS`` causes no attribute to be added if the | 
 | 898 | command-line argument was not present.:: | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 899 |  | 
 | 900 |    >>> parser = argparse.ArgumentParser() | 
 | 901 |    >>> parser.add_argument('--foo', default=argparse.SUPPRESS) | 
 | 902 |    >>> parser.parse_args([]) | 
 | 903 |    Namespace() | 
 | 904 |    >>> parser.parse_args(['--foo', '1']) | 
 | 905 |    Namespace(foo='1') | 
 | 906 |  | 
 | 907 |  | 
 | 908 | type | 
 | 909 | ^^^^ | 
 | 910 |  | 
| Éric Araujo | d9d7bca | 2011-08-10 04:19:03 +0200 | [diff] [blame] | 911 | By default, :class:`ArgumentParser` objects read command-line arguments in as simple | 
| Ezio Melotti | 5569e9b | 2011-04-22 01:42:10 +0300 | [diff] [blame] | 912 | strings. However, quite often the command-line string should instead be | 
 | 913 | interpreted as another type, like a :class:`float` or :class:`int`.  The | 
 | 914 | ``type`` keyword argument of :meth:`~ArgumentParser.add_argument` allows any | 
| Éric Araujo | d9d7bca | 2011-08-10 04:19:03 +0200 | [diff] [blame] | 915 | necessary type-checking and type conversions to be performed.  Common built-in | 
| Ezio Melotti | 5569e9b | 2011-04-22 01:42:10 +0300 | [diff] [blame] | 916 | types and functions can be used directly as the value of the ``type`` argument:: | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 917 |  | 
 | 918 |    >>> parser = argparse.ArgumentParser() | 
 | 919 |    >>> parser.add_argument('foo', type=int) | 
| Georg Brandl | 04536b0 | 2011-01-09 09:31:01 +0000 | [diff] [blame] | 920 |    >>> parser.add_argument('bar', type=open) | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 921 |    >>> parser.parse_args('2 temp.txt'.split()) | 
| Georg Brandl | 04536b0 | 2011-01-09 09:31:01 +0000 | [diff] [blame] | 922 |    Namespace(bar=<_io.TextIOWrapper name='temp.txt' encoding='UTF-8'>, foo=2) | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 923 |  | 
 | 924 | To ease the use of various types of files, the argparse module provides the | 
 | 925 | factory FileType which takes the ``mode=`` and ``bufsize=`` arguments of the | 
| Georg Brandl | 04536b0 | 2011-01-09 09:31:01 +0000 | [diff] [blame] | 926 | :func:`open` function.  For example, ``FileType('w')`` can be used to create a | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 927 | writable file:: | 
 | 928 |  | 
 | 929 |    >>> parser = argparse.ArgumentParser() | 
 | 930 |    >>> parser.add_argument('bar', type=argparse.FileType('w')) | 
 | 931 |    >>> parser.parse_args(['out.txt']) | 
| Georg Brandl | 04536b0 | 2011-01-09 09:31:01 +0000 | [diff] [blame] | 932 |    Namespace(bar=<_io.TextIOWrapper name='out.txt' encoding='UTF-8'>) | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 933 |  | 
| Benjamin Peterson | 98047eb | 2010-03-03 02:07:08 +0000 | [diff] [blame] | 934 | ``type=`` can take any callable that takes a single string argument and returns | 
| Éric Araujo | d9d7bca | 2011-08-10 04:19:03 +0200 | [diff] [blame] | 935 | the converted value:: | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 936 |  | 
 | 937 |    >>> def perfect_square(string): | 
 | 938 |    ...     value = int(string) | 
 | 939 |    ...     sqrt = math.sqrt(value) | 
 | 940 |    ...     if sqrt != int(sqrt): | 
 | 941 |    ...         msg = "%r is not a perfect square" % string | 
 | 942 |    ...         raise argparse.ArgumentTypeError(msg) | 
 | 943 |    ...     return value | 
 | 944 |    ... | 
 | 945 |    >>> parser = argparse.ArgumentParser(prog='PROG') | 
 | 946 |    >>> parser.add_argument('foo', type=perfect_square) | 
 | 947 |    >>> parser.parse_args('9'.split()) | 
 | 948 |    Namespace(foo=9) | 
 | 949 |    >>> parser.parse_args('7'.split()) | 
 | 950 |    usage: PROG [-h] foo | 
 | 951 |    PROG: error: argument foo: '7' is not a perfect square | 
 | 952 |  | 
| Benjamin Peterson | 98047eb | 2010-03-03 02:07:08 +0000 | [diff] [blame] | 953 | The choices_ keyword argument may be more convenient for type checkers that | 
 | 954 | simply check against a range of values:: | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 955 |  | 
 | 956 |    >>> parser = argparse.ArgumentParser(prog='PROG') | 
| Fred Drake | c7eb789 | 2011-03-03 05:29:59 +0000 | [diff] [blame] | 957 |    >>> parser.add_argument('foo', type=int, choices=range(5, 10)) | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 958 |    >>> parser.parse_args('7'.split()) | 
 | 959 |    Namespace(foo=7) | 
 | 960 |    >>> parser.parse_args('11'.split()) | 
 | 961 |    usage: PROG [-h] {5,6,7,8,9} | 
 | 962 |    PROG: error: argument foo: invalid choice: 11 (choose from 5, 6, 7, 8, 9) | 
 | 963 |  | 
 | 964 | See the choices_ section for more details. | 
 | 965 |  | 
 | 966 |  | 
 | 967 | choices | 
 | 968 | ^^^^^^^ | 
 | 969 |  | 
| Éric Araujo | d9d7bca | 2011-08-10 04:19:03 +0200 | [diff] [blame] | 970 | Some command-line arguments should be selected from a restricted set of values. | 
| Benjamin Peterson | 98047eb | 2010-03-03 02:07:08 +0000 | [diff] [blame] | 971 | These can be handled by passing a container object as the ``choices`` keyword | 
| Ezio Melotti | 5569e9b | 2011-04-22 01:42:10 +0300 | [diff] [blame] | 972 | argument to :meth:`~ArgumentParser.add_argument`.  When the command line is | 
| Éric Araujo | fde9242 | 2011-08-19 01:30:26 +0200 | [diff] [blame] | 973 | parsed, argument values will be checked, and an error message will be displayed if | 
 | 974 | the argument was not one of the acceptable values:: | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 975 |  | 
 | 976 |    >>> parser = argparse.ArgumentParser(prog='PROG') | 
 | 977 |    >>> parser.add_argument('foo', choices='abc') | 
 | 978 |    >>> parser.parse_args('c'.split()) | 
 | 979 |    Namespace(foo='c') | 
 | 980 |    >>> parser.parse_args('X'.split()) | 
 | 981 |    usage: PROG [-h] {a,b,c} | 
 | 982 |    PROG: error: argument foo: invalid choice: 'X' (choose from 'a', 'b', 'c') | 
 | 983 |  | 
 | 984 | Note that inclusion in the ``choices`` container is checked after any type_ | 
 | 985 | conversions have been performed, so the type of the objects in the ``choices`` | 
 | 986 | container should match the type_ specified:: | 
 | 987 |  | 
 | 988 |    >>> parser = argparse.ArgumentParser(prog='PROG') | 
 | 989 |    >>> parser.add_argument('foo', type=complex, choices=[1, 1j]) | 
 | 990 |    >>> parser.parse_args('1j'.split()) | 
 | 991 |    Namespace(foo=1j) | 
 | 992 |    >>> parser.parse_args('-- -4'.split()) | 
 | 993 |    usage: PROG [-h] {1,1j} | 
 | 994 |    PROG: error: argument foo: invalid choice: (-4+0j) (choose from 1, 1j) | 
 | 995 |  | 
 | 996 | Any object that supports the ``in`` operator can be passed as the ``choices`` | 
 | 997 | value, so :class:`dict` objects, :class:`set` objects, custom containers, | 
 | 998 | etc. are all supported. | 
 | 999 |  | 
 | 1000 |  | 
 | 1001 | required | 
 | 1002 | ^^^^^^^^ | 
 | 1003 |  | 
| Ezio Melotti | 0ee9c1b | 2011-04-21 16:12:17 +0300 | [diff] [blame] | 1004 | In general, the :mod:`argparse` module assumes that flags like ``-f`` and ``--bar`` | 
| Georg Brandl | 1d827ff | 2011-04-16 16:44:54 +0200 | [diff] [blame] | 1005 | indicate *optional* arguments, which can always be omitted at the command line. | 
| Benjamin Peterson | 98047eb | 2010-03-03 02:07:08 +0000 | [diff] [blame] | 1006 | To make an option *required*, ``True`` can be specified for the ``required=`` | 
| Ezio Melotti | 5569e9b | 2011-04-22 01:42:10 +0300 | [diff] [blame] | 1007 | keyword argument to :meth:`~ArgumentParser.add_argument`:: | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 1008 |  | 
 | 1009 |    >>> parser = argparse.ArgumentParser() | 
 | 1010 |    >>> parser.add_argument('--foo', required=True) | 
 | 1011 |    >>> parser.parse_args(['--foo', 'BAR']) | 
 | 1012 |    Namespace(foo='BAR') | 
 | 1013 |    >>> parser.parse_args([]) | 
 | 1014 |    usage: argparse.py [-h] [--foo FOO] | 
 | 1015 |    argparse.py: error: option --foo is required | 
 | 1016 |  | 
| Ezio Melotti | 5569e9b | 2011-04-22 01:42:10 +0300 | [diff] [blame] | 1017 | As the example shows, if an option is marked as ``required``, | 
 | 1018 | :meth:`~ArgumentParser.parse_args` will report an error if that option is not | 
 | 1019 | present at the command line. | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 1020 |  | 
| Benjamin Peterson | 98047eb | 2010-03-03 02:07:08 +0000 | [diff] [blame] | 1021 | .. note:: | 
 | 1022 |  | 
 | 1023 |     Required options are generally considered bad form because users expect | 
 | 1024 |     *options* to be *optional*, and thus they should be avoided when possible. | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 1025 |  | 
 | 1026 |  | 
 | 1027 | help | 
 | 1028 | ^^^^ | 
 | 1029 |  | 
| Benjamin Peterson | 98047eb | 2010-03-03 02:07:08 +0000 | [diff] [blame] | 1030 | The ``help`` value is a string containing a brief description of the argument. | 
 | 1031 | When a user requests help (usually by using ``-h`` or ``--help`` at the | 
| Georg Brandl | 1d827ff | 2011-04-16 16:44:54 +0200 | [diff] [blame] | 1032 | command line), these ``help`` descriptions will be displayed with each | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 1033 | argument:: | 
 | 1034 |  | 
 | 1035 |    >>> parser = argparse.ArgumentParser(prog='frobble') | 
 | 1036 |    >>> parser.add_argument('--foo', action='store_true', | 
 | 1037 |    ...         help='foo the bars before frobbling') | 
 | 1038 |    >>> parser.add_argument('bar', nargs='+', | 
 | 1039 |    ...         help='one of the bars to be frobbled') | 
 | 1040 |    >>> parser.parse_args('-h'.split()) | 
 | 1041 |    usage: frobble [-h] [--foo] bar [bar ...] | 
 | 1042 |  | 
 | 1043 |    positional arguments: | 
 | 1044 |     bar     one of the bars to be frobbled | 
 | 1045 |  | 
 | 1046 |    optional arguments: | 
 | 1047 |     -h, --help  show this help message and exit | 
 | 1048 |     --foo   foo the bars before frobbling | 
 | 1049 |  | 
 | 1050 | The ``help`` strings can include various format specifiers to avoid repetition | 
 | 1051 | of things like the program name or the argument default_.  The available | 
 | 1052 | specifiers include the program name, ``%(prog)s`` and most keyword arguments to | 
| Ezio Melotti | 5569e9b | 2011-04-22 01:42:10 +0300 | [diff] [blame] | 1053 | :meth:`~ArgumentParser.add_argument`, e.g. ``%(default)s``, ``%(type)s``, etc.:: | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 1054 |  | 
 | 1055 |    >>> parser = argparse.ArgumentParser(prog='frobble') | 
 | 1056 |    >>> parser.add_argument('bar', nargs='?', type=int, default=42, | 
 | 1057 |    ...         help='the bar to %(prog)s (default: %(default)s)') | 
 | 1058 |    >>> parser.print_help() | 
 | 1059 |    usage: frobble [-h] [bar] | 
 | 1060 |  | 
 | 1061 |    positional arguments: | 
 | 1062 |     bar     the bar to frobble (default: 42) | 
 | 1063 |  | 
 | 1064 |    optional arguments: | 
 | 1065 |     -h, --help  show this help message and exit | 
 | 1066 |  | 
| Sandro Tosi | ea320ab | 2012-01-03 18:37:03 +0100 | [diff] [blame] | 1067 | :mod:`argparse` supports silencing the help entry for certain options, by | 
 | 1068 | setting the ``help`` value to ``argparse.SUPPRESS``:: | 
 | 1069 |  | 
 | 1070 |    >>> parser = argparse.ArgumentParser(prog='frobble') | 
 | 1071 |    >>> parser.add_argument('--foo', help=argparse.SUPPRESS) | 
 | 1072 |    >>> parser.print_help() | 
 | 1073 |    usage: frobble [-h] | 
 | 1074 |  | 
 | 1075 |    optional arguments: | 
 | 1076 |      -h, --help  show this help message and exit | 
 | 1077 |  | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 1078 |  | 
 | 1079 | metavar | 
 | 1080 | ^^^^^^^ | 
 | 1081 |  | 
| Benjamin Peterson | 98047eb | 2010-03-03 02:07:08 +0000 | [diff] [blame] | 1082 | When :class:`ArgumentParser` generates help messages, it need some way to refer | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 1083 | to each expected argument.  By default, ArgumentParser objects use the dest_ | 
 | 1084 | value as the "name" of each object.  By default, for positional argument | 
 | 1085 | actions, the dest_ value is used directly, and for optional argument actions, | 
| Benjamin Peterson | 98047eb | 2010-03-03 02:07:08 +0000 | [diff] [blame] | 1086 | the dest_ value is uppercased.  So, a single positional argument with | 
| Eli Bendersky | a7795db | 2011-11-11 10:57:01 +0200 | [diff] [blame] | 1087 | ``dest='bar'`` will be referred to as ``bar``. A single | 
| Éric Araujo | fde9242 | 2011-08-19 01:30:26 +0200 | [diff] [blame] | 1088 | optional argument ``--foo`` that should be followed by a single command-line argument | 
| Benjamin Peterson | 98047eb | 2010-03-03 02:07:08 +0000 | [diff] [blame] | 1089 | will be referred to as ``FOO``.  An example:: | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 1090 |  | 
 | 1091 |    >>> parser = argparse.ArgumentParser() | 
 | 1092 |    >>> parser.add_argument('--foo') | 
 | 1093 |    >>> parser.add_argument('bar') | 
 | 1094 |    >>> parser.parse_args('X --foo Y'.split()) | 
 | 1095 |    Namespace(bar='X', foo='Y') | 
 | 1096 |    >>> parser.print_help() | 
 | 1097 |    usage:  [-h] [--foo FOO] bar | 
 | 1098 |  | 
 | 1099 |    positional arguments: | 
 | 1100 |     bar | 
 | 1101 |  | 
 | 1102 |    optional arguments: | 
 | 1103 |     -h, --help  show this help message and exit | 
 | 1104 |     --foo FOO | 
 | 1105 |  | 
| Benjamin Peterson | 98047eb | 2010-03-03 02:07:08 +0000 | [diff] [blame] | 1106 | An alternative name can be specified with ``metavar``:: | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 1107 |  | 
 | 1108 |    >>> parser = argparse.ArgumentParser() | 
 | 1109 |    >>> parser.add_argument('--foo', metavar='YYY') | 
 | 1110 |    >>> parser.add_argument('bar', metavar='XXX') | 
 | 1111 |    >>> parser.parse_args('X --foo Y'.split()) | 
 | 1112 |    Namespace(bar='X', foo='Y') | 
 | 1113 |    >>> parser.print_help() | 
 | 1114 |    usage:  [-h] [--foo YYY] XXX | 
 | 1115 |  | 
 | 1116 |    positional arguments: | 
 | 1117 |     XXX | 
 | 1118 |  | 
 | 1119 |    optional arguments: | 
 | 1120 |     -h, --help  show this help message and exit | 
 | 1121 |     --foo YYY | 
 | 1122 |  | 
 | 1123 | Note that ``metavar`` only changes the *displayed* name - the name of the | 
| Ezio Melotti | 5569e9b | 2011-04-22 01:42:10 +0300 | [diff] [blame] | 1124 | attribute on the :meth:`~ArgumentParser.parse_args` object is still determined | 
 | 1125 | by the dest_ value. | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 1126 |  | 
 | 1127 | Different values of ``nargs`` may cause the metavar to be used multiple times. | 
| Benjamin Peterson | 98047eb | 2010-03-03 02:07:08 +0000 | [diff] [blame] | 1128 | Providing a tuple to ``metavar`` specifies a different display for each of the | 
 | 1129 | arguments:: | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 1130 |  | 
 | 1131 |    >>> parser = argparse.ArgumentParser(prog='PROG') | 
 | 1132 |    >>> parser.add_argument('-x', nargs=2) | 
 | 1133 |    >>> parser.add_argument('--foo', nargs=2, metavar=('bar', 'baz')) | 
 | 1134 |    >>> parser.print_help() | 
 | 1135 |    usage: PROG [-h] [-x X X] [--foo bar baz] | 
 | 1136 |  | 
 | 1137 |    optional arguments: | 
 | 1138 |     -h, --help     show this help message and exit | 
 | 1139 |     -x X X | 
 | 1140 |     --foo bar baz | 
 | 1141 |  | 
 | 1142 |  | 
 | 1143 | dest | 
 | 1144 | ^^^^ | 
 | 1145 |  | 
| Benjamin Peterson | 98047eb | 2010-03-03 02:07:08 +0000 | [diff] [blame] | 1146 | Most :class:`ArgumentParser` actions add some value as an attribute of the | 
| Ezio Melotti | 5569e9b | 2011-04-22 01:42:10 +0300 | [diff] [blame] | 1147 | object returned by :meth:`~ArgumentParser.parse_args`.  The name of this | 
 | 1148 | attribute is determined by the ``dest`` keyword argument of | 
 | 1149 | :meth:`~ArgumentParser.add_argument`.  For positional argument actions, | 
 | 1150 | ``dest`` is normally supplied as the first argument to | 
 | 1151 | :meth:`~ArgumentParser.add_argument`:: | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 1152 |  | 
 | 1153 |    >>> parser = argparse.ArgumentParser() | 
 | 1154 |    >>> parser.add_argument('bar') | 
 | 1155 |    >>> parser.parse_args('XXX'.split()) | 
 | 1156 |    Namespace(bar='XXX') | 
 | 1157 |  | 
 | 1158 | For optional argument actions, the value of ``dest`` is normally inferred from | 
| Benjamin Peterson | 98047eb | 2010-03-03 02:07:08 +0000 | [diff] [blame] | 1159 | the option strings.  :class:`ArgumentParser` generates the value of ``dest`` by | 
| Éric Araujo | 543edbd | 2011-08-19 01:45:12 +0200 | [diff] [blame] | 1160 | taking the first long option string and stripping away the initial ``--`` | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 1161 | string.  If no long option strings were supplied, ``dest`` will be derived from | 
| Éric Araujo | 543edbd | 2011-08-19 01:45:12 +0200 | [diff] [blame] | 1162 | the first short option string by stripping the initial ``-`` character.  Any | 
 | 1163 | internal ``-`` characters will be converted to ``_`` characters to make sure | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 1164 | the string is a valid attribute name.  The examples below illustrate this | 
 | 1165 | behavior:: | 
 | 1166 |  | 
 | 1167 |    >>> parser = argparse.ArgumentParser() | 
 | 1168 |    >>> parser.add_argument('-f', '--foo-bar', '--foo') | 
 | 1169 |    >>> parser.add_argument('-x', '-y') | 
 | 1170 |    >>> parser.parse_args('-f 1 -x 2'.split()) | 
 | 1171 |    Namespace(foo_bar='1', x='2') | 
 | 1172 |    >>> parser.parse_args('--foo 1 -y 2'.split()) | 
 | 1173 |    Namespace(foo_bar='1', x='2') | 
 | 1174 |  | 
| Benjamin Peterson | 98047eb | 2010-03-03 02:07:08 +0000 | [diff] [blame] | 1175 | ``dest`` allows a custom attribute name to be provided:: | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 1176 |  | 
 | 1177 |    >>> parser = argparse.ArgumentParser() | 
 | 1178 |    >>> parser.add_argument('--foo', dest='bar') | 
 | 1179 |    >>> parser.parse_args('--foo XXX'.split()) | 
 | 1180 |    Namespace(bar='XXX') | 
 | 1181 |  | 
 | 1182 |  | 
 | 1183 | The parse_args() method | 
 | 1184 | ----------------------- | 
 | 1185 |  | 
| Georg Brandl | e0bf91d | 2010-10-17 10:34:28 +0000 | [diff] [blame] | 1186 | .. method:: ArgumentParser.parse_args(args=None, namespace=None) | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 1187 |  | 
| Benjamin Peterson | 98047eb | 2010-03-03 02:07:08 +0000 | [diff] [blame] | 1188 |    Convert argument strings to objects and assign them as attributes of the | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 1189 |    namespace.  Return the populated namespace. | 
 | 1190 |  | 
 | 1191 |    Previous calls to :meth:`add_argument` determine exactly what objects are | 
 | 1192 |    created and how they are assigned. See the documentation for | 
 | 1193 |    :meth:`add_argument` for details. | 
 | 1194 |  | 
| Éric Araujo | fde9242 | 2011-08-19 01:30:26 +0200 | [diff] [blame] | 1195 |    By default, the argument strings are taken from :data:`sys.argv`, and a new empty | 
| Benjamin Peterson | 98047eb | 2010-03-03 02:07:08 +0000 | [diff] [blame] | 1196 |    :class:`Namespace` object is created for the attributes. | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 1197 |  | 
| Georg Brandl | e0bf91d | 2010-10-17 10:34:28 +0000 | [diff] [blame] | 1198 |  | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 1199 | Option value syntax | 
 | 1200 | ^^^^^^^^^^^^^^^^^^^ | 
 | 1201 |  | 
| Ezio Melotti | 5569e9b | 2011-04-22 01:42:10 +0300 | [diff] [blame] | 1202 | The :meth:`~ArgumentParser.parse_args` method supports several ways of | 
 | 1203 | specifying the value of an option (if it takes one).  In the simplest case, the | 
 | 1204 | option and its value are passed as two separate arguments:: | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 1205 |  | 
 | 1206 |    >>> parser = argparse.ArgumentParser(prog='PROG') | 
 | 1207 |    >>> parser.add_argument('-x') | 
 | 1208 |    >>> parser.add_argument('--foo') | 
 | 1209 |    >>> parser.parse_args('-x X'.split()) | 
 | 1210 |    Namespace(foo=None, x='X') | 
 | 1211 |    >>> parser.parse_args('--foo FOO'.split()) | 
 | 1212 |    Namespace(foo='FOO', x=None) | 
 | 1213 |  | 
| Benjamin Peterson | 98047eb | 2010-03-03 02:07:08 +0000 | [diff] [blame] | 1214 | For long options (options with names longer than a single character), the option | 
| Georg Brandl | 1d827ff | 2011-04-16 16:44:54 +0200 | [diff] [blame] | 1215 | and value can also be passed as a single command-line argument, using ``=`` to | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 1216 | separate them:: | 
 | 1217 |  | 
 | 1218 |    >>> parser.parse_args('--foo=FOO'.split()) | 
 | 1219 |    Namespace(foo='FOO', x=None) | 
 | 1220 |  | 
| Benjamin Peterson | 98047eb | 2010-03-03 02:07:08 +0000 | [diff] [blame] | 1221 | For short options (options only one character long), the option and its value | 
 | 1222 | can be concatenated:: | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 1223 |  | 
 | 1224 |    >>> parser.parse_args('-xX'.split()) | 
 | 1225 |    Namespace(foo=None, x='X') | 
 | 1226 |  | 
| Benjamin Peterson | 98047eb | 2010-03-03 02:07:08 +0000 | [diff] [blame] | 1227 | Several short options can be joined together, using only a single ``-`` prefix, | 
 | 1228 | as long as only the last option (or none of them) requires a value:: | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 1229 |  | 
 | 1230 |    >>> parser = argparse.ArgumentParser(prog='PROG') | 
 | 1231 |    >>> parser.add_argument('-x', action='store_true') | 
 | 1232 |    >>> parser.add_argument('-y', action='store_true') | 
 | 1233 |    >>> parser.add_argument('-z') | 
 | 1234 |    >>> parser.parse_args('-xyzZ'.split()) | 
 | 1235 |    Namespace(x=True, y=True, z='Z') | 
 | 1236 |  | 
 | 1237 |  | 
 | 1238 | Invalid arguments | 
 | 1239 | ^^^^^^^^^^^^^^^^^ | 
 | 1240 |  | 
| Ezio Melotti | 5569e9b | 2011-04-22 01:42:10 +0300 | [diff] [blame] | 1241 | While parsing the command line, :meth:`~ArgumentParser.parse_args` checks for a | 
 | 1242 | variety of errors, including ambiguous options, invalid types, invalid options, | 
 | 1243 | wrong number of positional arguments, etc.  When it encounters such an error, | 
 | 1244 | it exits and prints the error along with a usage message:: | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 1245 |  | 
 | 1246 |    >>> parser = argparse.ArgumentParser(prog='PROG') | 
 | 1247 |    >>> parser.add_argument('--foo', type=int) | 
 | 1248 |    >>> parser.add_argument('bar', nargs='?') | 
 | 1249 |  | 
 | 1250 |    >>> # invalid type | 
 | 1251 |    >>> parser.parse_args(['--foo', 'spam']) | 
 | 1252 |    usage: PROG [-h] [--foo FOO] [bar] | 
 | 1253 |    PROG: error: argument --foo: invalid int value: 'spam' | 
 | 1254 |  | 
 | 1255 |    >>> # invalid option | 
 | 1256 |    >>> parser.parse_args(['--bar']) | 
 | 1257 |    usage: PROG [-h] [--foo FOO] [bar] | 
 | 1258 |    PROG: error: no such option: --bar | 
 | 1259 |  | 
 | 1260 |    >>> # wrong number of arguments | 
 | 1261 |    >>> parser.parse_args(['spam', 'badger']) | 
 | 1262 |    usage: PROG [-h] [--foo FOO] [bar] | 
 | 1263 |    PROG: error: extra arguments found: badger | 
 | 1264 |  | 
 | 1265 |  | 
| Éric Araujo | 543edbd | 2011-08-19 01:45:12 +0200 | [diff] [blame] | 1266 | Arguments containing ``-`` | 
 | 1267 | ^^^^^^^^^^^^^^^^^^^^^^^^^^ | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 1268 |  | 
| Ezio Melotti | 5569e9b | 2011-04-22 01:42:10 +0300 | [diff] [blame] | 1269 | The :meth:`~ArgumentParser.parse_args` method attempts to give errors whenever | 
 | 1270 | the user has clearly made a mistake, but some situations are inherently | 
| Éric Araujo | 543edbd | 2011-08-19 01:45:12 +0200 | [diff] [blame] | 1271 | ambiguous.  For example, the command-line argument ``-1`` could either be an | 
| Ezio Melotti | 5569e9b | 2011-04-22 01:42:10 +0300 | [diff] [blame] | 1272 | attempt to specify an option or an attempt to provide a positional argument. | 
 | 1273 | The :meth:`~ArgumentParser.parse_args` method is cautious here: positional | 
| Éric Araujo | 543edbd | 2011-08-19 01:45:12 +0200 | [diff] [blame] | 1274 | arguments may only begin with ``-`` if they look like negative numbers and | 
| Ezio Melotti | 5569e9b | 2011-04-22 01:42:10 +0300 | [diff] [blame] | 1275 | there are no options in the parser that look like negative numbers:: | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 1276 |  | 
 | 1277 |    >>> parser = argparse.ArgumentParser(prog='PROG') | 
 | 1278 |    >>> parser.add_argument('-x') | 
 | 1279 |    >>> parser.add_argument('foo', nargs='?') | 
 | 1280 |  | 
 | 1281 |    >>> # no negative number options, so -1 is a positional argument | 
 | 1282 |    >>> parser.parse_args(['-x', '-1']) | 
 | 1283 |    Namespace(foo=None, x='-1') | 
 | 1284 |  | 
 | 1285 |    >>> # no negative number options, so -1 and -5 are positional arguments | 
 | 1286 |    >>> parser.parse_args(['-x', '-1', '-5']) | 
 | 1287 |    Namespace(foo='-5', x='-1') | 
 | 1288 |  | 
 | 1289 |    >>> parser = argparse.ArgumentParser(prog='PROG') | 
 | 1290 |    >>> parser.add_argument('-1', dest='one') | 
 | 1291 |    >>> parser.add_argument('foo', nargs='?') | 
 | 1292 |  | 
 | 1293 |    >>> # negative number options present, so -1 is an option | 
 | 1294 |    >>> parser.parse_args(['-1', 'X']) | 
 | 1295 |    Namespace(foo=None, one='X') | 
 | 1296 |  | 
 | 1297 |    >>> # negative number options present, so -2 is an option | 
 | 1298 |    >>> parser.parse_args(['-2']) | 
 | 1299 |    usage: PROG [-h] [-1 ONE] [foo] | 
 | 1300 |    PROG: error: no such option: -2 | 
 | 1301 |  | 
 | 1302 |    >>> # negative number options present, so both -1s are options | 
 | 1303 |    >>> parser.parse_args(['-1', '-1']) | 
 | 1304 |    usage: PROG [-h] [-1 ONE] [foo] | 
 | 1305 |    PROG: error: argument -1: expected one argument | 
 | 1306 |  | 
| Éric Araujo | 543edbd | 2011-08-19 01:45:12 +0200 | [diff] [blame] | 1307 | If you have positional arguments that must begin with ``-`` and don't look | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 1308 | like negative numbers, you can insert the pseudo-argument ``'--'`` which tells | 
| Ezio Melotti | 5569e9b | 2011-04-22 01:42:10 +0300 | [diff] [blame] | 1309 | :meth:`~ArgumentParser.parse_args` that everything after that is a positional | 
 | 1310 | argument:: | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 1311 |  | 
 | 1312 |    >>> parser.parse_args(['--', '-f']) | 
 | 1313 |    Namespace(foo='-f', one=None) | 
 | 1314 |  | 
 | 1315 |  | 
 | 1316 | Argument abbreviations | 
 | 1317 | ^^^^^^^^^^^^^^^^^^^^^^ | 
 | 1318 |  | 
| Ezio Melotti | 5569e9b | 2011-04-22 01:42:10 +0300 | [diff] [blame] | 1319 | The :meth:`~ArgumentParser.parse_args` method allows long options to be | 
 | 1320 | abbreviated if the abbreviation is unambiguous:: | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 1321 |  | 
 | 1322 |    >>> parser = argparse.ArgumentParser(prog='PROG') | 
 | 1323 |    >>> parser.add_argument('-bacon') | 
 | 1324 |    >>> parser.add_argument('-badger') | 
 | 1325 |    >>> parser.parse_args('-bac MMM'.split()) | 
 | 1326 |    Namespace(bacon='MMM', badger=None) | 
 | 1327 |    >>> parser.parse_args('-bad WOOD'.split()) | 
 | 1328 |    Namespace(bacon=None, badger='WOOD') | 
 | 1329 |    >>> parser.parse_args('-ba BA'.split()) | 
 | 1330 |    usage: PROG [-h] [-bacon BACON] [-badger BADGER] | 
 | 1331 |    PROG: error: ambiguous option: -ba could match -badger, -bacon | 
 | 1332 |  | 
| Benjamin Peterson | 98047eb | 2010-03-03 02:07:08 +0000 | [diff] [blame] | 1333 | An error is produced for arguments that could produce more than one options. | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 1334 |  | 
 | 1335 |  | 
 | 1336 | Beyond ``sys.argv`` | 
 | 1337 | ^^^^^^^^^^^^^^^^^^^ | 
 | 1338 |  | 
| Éric Araujo | d9d7bca | 2011-08-10 04:19:03 +0200 | [diff] [blame] | 1339 | Sometimes it may be useful to have an ArgumentParser parse arguments other than those | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 1340 | of :data:`sys.argv`.  This can be accomplished by passing a list of strings to | 
| Ezio Melotti | 5569e9b | 2011-04-22 01:42:10 +0300 | [diff] [blame] | 1341 | :meth:`~ArgumentParser.parse_args`.  This is useful for testing at the | 
 | 1342 | interactive prompt:: | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 1343 |  | 
 | 1344 |    >>> parser = argparse.ArgumentParser() | 
 | 1345 |    >>> parser.add_argument( | 
| Fred Drake | c7eb789 | 2011-03-03 05:29:59 +0000 | [diff] [blame] | 1346 |    ...     'integers', metavar='int', type=int, choices=range(10), | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 1347 |    ...  nargs='+', help='an integer in the range 0..9') | 
 | 1348 |    >>> parser.add_argument( | 
 | 1349 |    ...     '--sum', dest='accumulate', action='store_const', const=sum, | 
 | 1350 |    ...   default=max, help='sum the integers (default: find the max)') | 
 | 1351 |    >>> parser.parse_args(['1', '2', '3', '4']) | 
 | 1352 |    Namespace(accumulate=<built-in function max>, integers=[1, 2, 3, 4]) | 
 | 1353 |    >>> parser.parse_args('1 2 3 4 --sum'.split()) | 
 | 1354 |    Namespace(accumulate=<built-in function sum>, integers=[1, 2, 3, 4]) | 
 | 1355 |  | 
 | 1356 |  | 
| Steven Bethard | d8f2d50 | 2011-03-26 19:50:06 +0100 | [diff] [blame] | 1357 | The Namespace object | 
 | 1358 | ^^^^^^^^^^^^^^^^^^^^ | 
 | 1359 |  | 
| Éric Araujo | 63b18a4 | 2011-07-29 17:59:17 +0200 | [diff] [blame] | 1360 | .. class:: Namespace | 
 | 1361 |  | 
 | 1362 |    Simple class used by default by :meth:`~ArgumentParser.parse_args` to create | 
 | 1363 |    an object holding attributes and return it. | 
 | 1364 |  | 
 | 1365 | This class is deliberately simple, just an :class:`object` subclass with a | 
 | 1366 | readable string representation. If you prefer to have dict-like view of the | 
 | 1367 | attributes, you can use the standard Python idiom, :func:`vars`:: | 
| Steven Bethard | d8f2d50 | 2011-03-26 19:50:06 +0100 | [diff] [blame] | 1368 |  | 
 | 1369 |    >>> parser = argparse.ArgumentParser() | 
 | 1370 |    >>> parser.add_argument('--foo') | 
 | 1371 |    >>> args = parser.parse_args(['--foo', 'BAR']) | 
 | 1372 |    >>> vars(args) | 
 | 1373 |    {'foo': 'BAR'} | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 1374 |  | 
| Benjamin Peterson | 98047eb | 2010-03-03 02:07:08 +0000 | [diff] [blame] | 1375 | It may also be useful to have an :class:`ArgumentParser` assign attributes to an | 
| Steven Bethard | d8f2d50 | 2011-03-26 19:50:06 +0100 | [diff] [blame] | 1376 | already existing object, rather than a new :class:`Namespace` object.  This can | 
 | 1377 | be achieved by specifying the ``namespace=`` keyword argument:: | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 1378 |  | 
| Éric Araujo | 28053fb | 2010-11-22 03:09:19 +0000 | [diff] [blame] | 1379 |    >>> class C: | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 1380 |    ...     pass | 
 | 1381 |    ... | 
 | 1382 |    >>> c = C() | 
 | 1383 |    >>> parser = argparse.ArgumentParser() | 
 | 1384 |    >>> parser.add_argument('--foo') | 
 | 1385 |    >>> parser.parse_args(args=['--foo', 'BAR'], namespace=c) | 
 | 1386 |    >>> c.foo | 
 | 1387 |    'BAR' | 
 | 1388 |  | 
 | 1389 |  | 
 | 1390 | Other utilities | 
 | 1391 | --------------- | 
 | 1392 |  | 
 | 1393 | Sub-commands | 
 | 1394 | ^^^^^^^^^^^^ | 
 | 1395 |  | 
| Benjamin Peterson | 98047eb | 2010-03-03 02:07:08 +0000 | [diff] [blame] | 1396 | .. method:: ArgumentParser.add_subparsers() | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 1397 |  | 
| Benjamin Peterson | 98047eb | 2010-03-03 02:07:08 +0000 | [diff] [blame] | 1398 |    Many programs split up their functionality into a number of sub-commands, | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 1399 |    for example, the ``svn`` program can invoke sub-commands like ``svn | 
| Benjamin Peterson | 98047eb | 2010-03-03 02:07:08 +0000 | [diff] [blame] | 1400 |    checkout``, ``svn update``, and ``svn commit``.  Splitting up functionality | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 1401 |    this way can be a particularly good idea when a program performs several | 
 | 1402 |    different functions which require different kinds of command-line arguments. | 
| Benjamin Peterson | 98047eb | 2010-03-03 02:07:08 +0000 | [diff] [blame] | 1403 |    :class:`ArgumentParser` supports the creation of such sub-commands with the | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 1404 |    :meth:`add_subparsers` method.  The :meth:`add_subparsers` method is normally | 
 | 1405 |    called with no arguments and returns an special action object.  This object | 
| Ezio Melotti | 5569e9b | 2011-04-22 01:42:10 +0300 | [diff] [blame] | 1406 |    has a single method, :meth:`~ArgumentParser.add_parser`, which takes a | 
 | 1407 |    command name and any :class:`ArgumentParser` constructor arguments, and | 
 | 1408 |    returns an :class:`ArgumentParser` object that can be modified as usual. | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 1409 |  | 
 | 1410 |    Some example usage:: | 
 | 1411 |  | 
 | 1412 |      >>> # create the top-level parser | 
 | 1413 |      >>> parser = argparse.ArgumentParser(prog='PROG') | 
 | 1414 |      >>> parser.add_argument('--foo', action='store_true', help='foo help') | 
 | 1415 |      >>> subparsers = parser.add_subparsers(help='sub-command help') | 
 | 1416 |      >>> | 
 | 1417 |      >>> # create the parser for the "a" command | 
 | 1418 |      >>> parser_a = subparsers.add_parser('a', help='a help') | 
 | 1419 |      >>> parser_a.add_argument('bar', type=int, help='bar help') | 
 | 1420 |      >>> | 
 | 1421 |      >>> # create the parser for the "b" command | 
 | 1422 |      >>> parser_b = subparsers.add_parser('b', help='b help') | 
 | 1423 |      >>> parser_b.add_argument('--baz', choices='XYZ', help='baz help') | 
 | 1424 |      >>> | 
| Éric Araujo | fde9242 | 2011-08-19 01:30:26 +0200 | [diff] [blame] | 1425 |      >>> # parse some argument lists | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 1426 |      >>> parser.parse_args(['a', '12']) | 
 | 1427 |      Namespace(bar=12, foo=False) | 
 | 1428 |      >>> parser.parse_args(['--foo', 'b', '--baz', 'Z']) | 
 | 1429 |      Namespace(baz='Z', foo=True) | 
 | 1430 |  | 
 | 1431 |    Note that the object returned by :meth:`parse_args` will only contain | 
 | 1432 |    attributes for the main parser and the subparser that was selected by the | 
 | 1433 |    command line (and not any other subparsers).  So in the example above, when | 
| Éric Araujo | 543edbd | 2011-08-19 01:45:12 +0200 | [diff] [blame] | 1434 |    the ``a`` command is specified, only the ``foo`` and ``bar`` attributes are | 
 | 1435 |    present, and when the ``b`` command is specified, only the ``foo`` and | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 1436 |    ``baz`` attributes are present. | 
 | 1437 |  | 
 | 1438 |    Similarly, when a help message is requested from a subparser, only the help | 
 | 1439 |    for that particular parser will be printed.  The help message will not | 
| Benjamin Peterson | 98047eb | 2010-03-03 02:07:08 +0000 | [diff] [blame] | 1440 |    include parent parser or sibling parser messages.  (A help message for each | 
 | 1441 |    subparser command, however, can be given by supplying the ``help=`` argument | 
| Ezio Melotti | 5569e9b | 2011-04-22 01:42:10 +0300 | [diff] [blame] | 1442 |    to :meth:`add_parser` as above.) | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 1443 |  | 
 | 1444 |    :: | 
 | 1445 |  | 
 | 1446 |      >>> parser.parse_args(['--help']) | 
 | 1447 |      usage: PROG [-h] [--foo] {a,b} ... | 
 | 1448 |  | 
 | 1449 |      positional arguments: | 
 | 1450 |        {a,b}   sub-command help | 
 | 1451 |      a     a help | 
 | 1452 |      b     b help | 
 | 1453 |  | 
 | 1454 |      optional arguments: | 
 | 1455 |        -h, --help  show this help message and exit | 
 | 1456 |        --foo   foo help | 
 | 1457 |  | 
 | 1458 |      >>> parser.parse_args(['a', '--help']) | 
 | 1459 |      usage: PROG a [-h] bar | 
 | 1460 |  | 
 | 1461 |      positional arguments: | 
 | 1462 |        bar     bar help | 
 | 1463 |  | 
 | 1464 |      optional arguments: | 
 | 1465 |        -h, --help  show this help message and exit | 
 | 1466 |  | 
 | 1467 |      >>> parser.parse_args(['b', '--help']) | 
 | 1468 |      usage: PROG b [-h] [--baz {X,Y,Z}] | 
 | 1469 |  | 
 | 1470 |      optional arguments: | 
 | 1471 |        -h, --help     show this help message and exit | 
 | 1472 |        --baz {X,Y,Z}  baz help | 
 | 1473 |  | 
 | 1474 |    The :meth:`add_subparsers` method also supports ``title`` and ``description`` | 
 | 1475 |    keyword arguments.  When either is present, the subparser's commands will | 
 | 1476 |    appear in their own group in the help output.  For example:: | 
 | 1477 |  | 
 | 1478 |      >>> parser = argparse.ArgumentParser() | 
 | 1479 |      >>> subparsers = parser.add_subparsers(title='subcommands', | 
 | 1480 |      ...                                    description='valid subcommands', | 
 | 1481 |      ...                                    help='additional help') | 
 | 1482 |      >>> subparsers.add_parser('foo') | 
 | 1483 |      >>> subparsers.add_parser('bar') | 
 | 1484 |      >>> parser.parse_args(['-h']) | 
 | 1485 |      usage:  [-h] {foo,bar} ... | 
 | 1486 |  | 
 | 1487 |      optional arguments: | 
 | 1488 |        -h, --help  show this help message and exit | 
 | 1489 |  | 
 | 1490 |      subcommands: | 
 | 1491 |        valid subcommands | 
 | 1492 |  | 
 | 1493 |        {foo,bar}   additional help | 
 | 1494 |  | 
| Steven Bethard | fd311a7 | 2010-12-18 11:19:23 +0000 | [diff] [blame] | 1495 |    Furthermore, ``add_parser`` supports an additional ``aliases`` argument, | 
 | 1496 |    which allows multiple strings to refer to the same subparser. This example, | 
 | 1497 |    like ``svn``, aliases ``co`` as a shorthand for ``checkout``:: | 
 | 1498 |  | 
 | 1499 |      >>> parser = argparse.ArgumentParser() | 
 | 1500 |      >>> subparsers = parser.add_subparsers() | 
 | 1501 |      >>> checkout = subparsers.add_parser('checkout', aliases=['co']) | 
 | 1502 |      >>> checkout.add_argument('foo') | 
 | 1503 |      >>> parser.parse_args(['co', 'bar']) | 
 | 1504 |      Namespace(foo='bar') | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 1505 |  | 
 | 1506 |    One particularly effective way of handling sub-commands is to combine the use | 
 | 1507 |    of the :meth:`add_subparsers` method with calls to :meth:`set_defaults` so | 
 | 1508 |    that each subparser knows which Python function it should execute.  For | 
 | 1509 |    example:: | 
 | 1510 |  | 
 | 1511 |      >>> # sub-command functions | 
 | 1512 |      >>> def foo(args): | 
| Benjamin Peterson | b2deb11 | 2010-03-03 02:09:18 +0000 | [diff] [blame] | 1513 |      ...     print(args.x * args.y) | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 1514 |      ... | 
 | 1515 |      >>> def bar(args): | 
| Benjamin Peterson | b2deb11 | 2010-03-03 02:09:18 +0000 | [diff] [blame] | 1516 |      ...     print('((%s))' % args.z) | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 1517 |      ... | 
 | 1518 |      >>> # create the top-level parser | 
 | 1519 |      >>> parser = argparse.ArgumentParser() | 
 | 1520 |      >>> subparsers = parser.add_subparsers() | 
 | 1521 |      >>> | 
 | 1522 |      >>> # create the parser for the "foo" command | 
 | 1523 |      >>> parser_foo = subparsers.add_parser('foo') | 
 | 1524 |      >>> parser_foo.add_argument('-x', type=int, default=1) | 
 | 1525 |      >>> parser_foo.add_argument('y', type=float) | 
 | 1526 |      >>> parser_foo.set_defaults(func=foo) | 
 | 1527 |      >>> | 
 | 1528 |      >>> # create the parser for the "bar" command | 
 | 1529 |      >>> parser_bar = subparsers.add_parser('bar') | 
 | 1530 |      >>> parser_bar.add_argument('z') | 
 | 1531 |      >>> parser_bar.set_defaults(func=bar) | 
 | 1532 |      >>> | 
 | 1533 |      >>> # parse the args and call whatever function was selected | 
 | 1534 |      >>> args = parser.parse_args('foo 1 -x 2'.split()) | 
 | 1535 |      >>> args.func(args) | 
 | 1536 |      2.0 | 
 | 1537 |      >>> | 
 | 1538 |      >>> # parse the args and call whatever function was selected | 
 | 1539 |      >>> args = parser.parse_args('bar XYZYX'.split()) | 
 | 1540 |      >>> args.func(args) | 
 | 1541 |      ((XYZYX)) | 
 | 1542 |  | 
| Steven Bethard | fd311a7 | 2010-12-18 11:19:23 +0000 | [diff] [blame] | 1543 |    This way, you can let :meth:`parse_args` do the job of calling the | 
| Benjamin Peterson | 98047eb | 2010-03-03 02:07:08 +0000 | [diff] [blame] | 1544 |    appropriate function after argument parsing is complete.  Associating | 
 | 1545 |    functions with actions like this is typically the easiest way to handle the | 
 | 1546 |    different actions for each of your subparsers.  However, if it is necessary | 
 | 1547 |    to check the name of the subparser that was invoked, the ``dest`` keyword | 
 | 1548 |    argument to the :meth:`add_subparsers` call will work:: | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 1549 |  | 
 | 1550 |      >>> parser = argparse.ArgumentParser() | 
 | 1551 |      >>> subparsers = parser.add_subparsers(dest='subparser_name') | 
 | 1552 |      >>> subparser1 = subparsers.add_parser('1') | 
 | 1553 |      >>> subparser1.add_argument('-x') | 
 | 1554 |      >>> subparser2 = subparsers.add_parser('2') | 
 | 1555 |      >>> subparser2.add_argument('y') | 
 | 1556 |      >>> parser.parse_args(['2', 'frobble']) | 
 | 1557 |      Namespace(subparser_name='2', y='frobble') | 
 | 1558 |  | 
 | 1559 |  | 
 | 1560 | FileType objects | 
 | 1561 | ^^^^^^^^^^^^^^^^ | 
 | 1562 |  | 
 | 1563 | .. class:: FileType(mode='r', bufsize=None) | 
 | 1564 |  | 
 | 1565 |    The :class:`FileType` factory creates objects that can be passed to the type | 
| Benjamin Peterson | 98047eb | 2010-03-03 02:07:08 +0000 | [diff] [blame] | 1566 |    argument of :meth:`ArgumentParser.add_argument`.  Arguments that have | 
| Éric Araujo | d9d7bca | 2011-08-10 04:19:03 +0200 | [diff] [blame] | 1567 |    :class:`FileType` objects as their type will open command-line arguments as files | 
| Benjamin Peterson | 98047eb | 2010-03-03 02:07:08 +0000 | [diff] [blame] | 1568 |    with the requested modes and buffer sizes: | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 1569 |  | 
 | 1570 |    >>> parser = argparse.ArgumentParser() | 
 | 1571 |    >>> parser.add_argument('--output', type=argparse.FileType('wb', 0)) | 
 | 1572 |    >>> parser.parse_args(['--output', 'out']) | 
| Georg Brandl | 04536b0 | 2011-01-09 09:31:01 +0000 | [diff] [blame] | 1573 |    Namespace(output=<_io.BufferedWriter name='out'>) | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 1574 |  | 
 | 1575 |    FileType objects understand the pseudo-argument ``'-'`` and automatically | 
 | 1576 |    convert this into ``sys.stdin`` for readable :class:`FileType` objects and | 
 | 1577 |    ``sys.stdout`` for writable :class:`FileType` objects: | 
 | 1578 |  | 
 | 1579 |    >>> parser = argparse.ArgumentParser() | 
 | 1580 |    >>> parser.add_argument('infile', type=argparse.FileType('r')) | 
 | 1581 |    >>> parser.parse_args(['-']) | 
| Georg Brandl | 04536b0 | 2011-01-09 09:31:01 +0000 | [diff] [blame] | 1582 |    Namespace(infile=<_io.TextIOWrapper name='<stdin>' encoding='UTF-8'>) | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 1583 |  | 
 | 1584 |  | 
 | 1585 | Argument groups | 
 | 1586 | ^^^^^^^^^^^^^^^ | 
 | 1587 |  | 
| Georg Brandl | e0bf91d | 2010-10-17 10:34:28 +0000 | [diff] [blame] | 1588 | .. method:: ArgumentParser.add_argument_group(title=None, description=None) | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 1589 |  | 
| Benjamin Peterson | 98047eb | 2010-03-03 02:07:08 +0000 | [diff] [blame] | 1590 |    By default, :class:`ArgumentParser` groups command-line arguments into | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 1591 |    "positional arguments" and "optional arguments" when displaying help | 
 | 1592 |    messages. When there is a better conceptual grouping of arguments than this | 
 | 1593 |    default one, appropriate groups can be created using the | 
 | 1594 |    :meth:`add_argument_group` method:: | 
 | 1595 |  | 
 | 1596 |      >>> parser = argparse.ArgumentParser(prog='PROG', add_help=False) | 
 | 1597 |      >>> group = parser.add_argument_group('group') | 
 | 1598 |      >>> group.add_argument('--foo', help='foo help') | 
 | 1599 |      >>> group.add_argument('bar', help='bar help') | 
 | 1600 |      >>> parser.print_help() | 
 | 1601 |      usage: PROG [--foo FOO] bar | 
 | 1602 |  | 
 | 1603 |      group: | 
 | 1604 |        bar    bar help | 
 | 1605 |        --foo FOO  foo help | 
 | 1606 |  | 
 | 1607 |    The :meth:`add_argument_group` method returns an argument group object which | 
| Benjamin Peterson | 98047eb | 2010-03-03 02:07:08 +0000 | [diff] [blame] | 1608 |    has an :meth:`~ArgumentParser.add_argument` method just like a regular | 
 | 1609 |    :class:`ArgumentParser`.  When an argument is added to the group, the parser | 
 | 1610 |    treats it just like a normal argument, but displays the argument in a | 
 | 1611 |    separate group for help messages.  The :meth:`add_argument_group` method | 
| Georg Brandl | e0bf91d | 2010-10-17 10:34:28 +0000 | [diff] [blame] | 1612 |    accepts *title* and *description* arguments which can be used to | 
| Benjamin Peterson | 98047eb | 2010-03-03 02:07:08 +0000 | [diff] [blame] | 1613 |    customize this display:: | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 1614 |  | 
 | 1615 |      >>> parser = argparse.ArgumentParser(prog='PROG', add_help=False) | 
 | 1616 |      >>> group1 = parser.add_argument_group('group1', 'group1 description') | 
 | 1617 |      >>> group1.add_argument('foo', help='foo help') | 
 | 1618 |      >>> group2 = parser.add_argument_group('group2', 'group2 description') | 
 | 1619 |      >>> group2.add_argument('--bar', help='bar help') | 
 | 1620 |      >>> parser.print_help() | 
 | 1621 |      usage: PROG [--bar BAR] foo | 
 | 1622 |  | 
 | 1623 |      group1: | 
 | 1624 |        group1 description | 
 | 1625 |  | 
 | 1626 |        foo    foo help | 
 | 1627 |  | 
 | 1628 |      group2: | 
 | 1629 |        group2 description | 
 | 1630 |  | 
 | 1631 |        --bar BAR  bar help | 
 | 1632 |  | 
| Benjamin Peterson | 98047eb | 2010-03-03 02:07:08 +0000 | [diff] [blame] | 1633 |    Note that any arguments not your user defined groups will end up back in the | 
 | 1634 |    usual "positional arguments" and "optional arguments" sections. | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 1635 |  | 
 | 1636 |  | 
 | 1637 | Mutual exclusion | 
 | 1638 | ^^^^^^^^^^^^^^^^ | 
 | 1639 |  | 
| Georg Brandl | e0bf91d | 2010-10-17 10:34:28 +0000 | [diff] [blame] | 1640 | .. method:: add_mutually_exclusive_group(required=False) | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 1641 |  | 
| Ezio Melotti | 0ee9c1b | 2011-04-21 16:12:17 +0300 | [diff] [blame] | 1642 |    Create a mutually exclusive group. :mod:`argparse` will make sure that only | 
 | 1643 |    one of the arguments in the mutually exclusive group was present on the | 
 | 1644 |    command line:: | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 1645 |  | 
 | 1646 |      >>> parser = argparse.ArgumentParser(prog='PROG') | 
 | 1647 |      >>> group = parser.add_mutually_exclusive_group() | 
 | 1648 |      >>> group.add_argument('--foo', action='store_true') | 
 | 1649 |      >>> group.add_argument('--bar', action='store_false') | 
 | 1650 |      >>> parser.parse_args(['--foo']) | 
 | 1651 |      Namespace(bar=True, foo=True) | 
 | 1652 |      >>> parser.parse_args(['--bar']) | 
 | 1653 |      Namespace(bar=False, foo=False) | 
 | 1654 |      >>> parser.parse_args(['--foo', '--bar']) | 
 | 1655 |      usage: PROG [-h] [--foo | --bar] | 
 | 1656 |      PROG: error: argument --bar: not allowed with argument --foo | 
 | 1657 |  | 
| Georg Brandl | e0bf91d | 2010-10-17 10:34:28 +0000 | [diff] [blame] | 1658 |    The :meth:`add_mutually_exclusive_group` method also accepts a *required* | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 1659 |    argument, to indicate that at least one of the mutually exclusive arguments | 
 | 1660 |    is required:: | 
 | 1661 |  | 
 | 1662 |      >>> parser = argparse.ArgumentParser(prog='PROG') | 
 | 1663 |      >>> group = parser.add_mutually_exclusive_group(required=True) | 
 | 1664 |      >>> group.add_argument('--foo', action='store_true') | 
 | 1665 |      >>> group.add_argument('--bar', action='store_false') | 
 | 1666 |      >>> parser.parse_args([]) | 
 | 1667 |      usage: PROG [-h] (--foo | --bar) | 
 | 1668 |      PROG: error: one of the arguments --foo --bar is required | 
 | 1669 |  | 
 | 1670 |    Note that currently mutually exclusive argument groups do not support the | 
| Ezio Melotti | 5569e9b | 2011-04-22 01:42:10 +0300 | [diff] [blame] | 1671 |    *title* and *description* arguments of | 
 | 1672 |    :meth:`~ArgumentParser.add_argument_group`. | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 1673 |  | 
 | 1674 |  | 
 | 1675 | Parser defaults | 
 | 1676 | ^^^^^^^^^^^^^^^ | 
 | 1677 |  | 
| Benjamin Peterson | 98047eb | 2010-03-03 02:07:08 +0000 | [diff] [blame] | 1678 | .. method:: ArgumentParser.set_defaults(**kwargs) | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 1679 |  | 
 | 1680 |    Most of the time, the attributes of the object returned by :meth:`parse_args` | 
| Éric Araujo | d9d7bca | 2011-08-10 04:19:03 +0200 | [diff] [blame] | 1681 |    will be fully determined by inspecting the command-line arguments and the argument | 
| Ezio Melotti | 5569e9b | 2011-04-22 01:42:10 +0300 | [diff] [blame] | 1682 |    actions.  :meth:`set_defaults` allows some additional | 
| Georg Brandl | 1d827ff | 2011-04-16 16:44:54 +0200 | [diff] [blame] | 1683 |    attributes that are determined without any inspection of the command line to | 
| Benjamin Peterson | 98047eb | 2010-03-03 02:07:08 +0000 | [diff] [blame] | 1684 |    be added:: | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 1685 |  | 
 | 1686 |      >>> parser = argparse.ArgumentParser() | 
 | 1687 |      >>> parser.add_argument('foo', type=int) | 
 | 1688 |      >>> parser.set_defaults(bar=42, baz='badger') | 
 | 1689 |      >>> parser.parse_args(['736']) | 
 | 1690 |      Namespace(bar=42, baz='badger', foo=736) | 
 | 1691 |  | 
| Benjamin Peterson | 98047eb | 2010-03-03 02:07:08 +0000 | [diff] [blame] | 1692 |    Note that parser-level defaults always override argument-level defaults:: | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 1693 |  | 
 | 1694 |      >>> parser = argparse.ArgumentParser() | 
 | 1695 |      >>> parser.add_argument('--foo', default='bar') | 
 | 1696 |      >>> parser.set_defaults(foo='spam') | 
 | 1697 |      >>> parser.parse_args([]) | 
 | 1698 |      Namespace(foo='spam') | 
 | 1699 |  | 
| Benjamin Peterson | 98047eb | 2010-03-03 02:07:08 +0000 | [diff] [blame] | 1700 |    Parser-level defaults can be particularly useful when working with multiple | 
 | 1701 |    parsers.  See the :meth:`~ArgumentParser.add_subparsers` method for an | 
 | 1702 |    example of this type. | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 1703 |  | 
| Benjamin Peterson | 98047eb | 2010-03-03 02:07:08 +0000 | [diff] [blame] | 1704 | .. method:: ArgumentParser.get_default(dest) | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 1705 |  | 
 | 1706 |    Get the default value for a namespace attribute, as set by either | 
| Benjamin Peterson | 98047eb | 2010-03-03 02:07:08 +0000 | [diff] [blame] | 1707 |    :meth:`~ArgumentParser.add_argument` or by | 
 | 1708 |    :meth:`~ArgumentParser.set_defaults`:: | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 1709 |  | 
 | 1710 |      >>> parser = argparse.ArgumentParser() | 
 | 1711 |      >>> parser.add_argument('--foo', default='badger') | 
 | 1712 |      >>> parser.get_default('foo') | 
 | 1713 |      'badger' | 
 | 1714 |  | 
 | 1715 |  | 
 | 1716 | Printing help | 
 | 1717 | ^^^^^^^^^^^^^ | 
 | 1718 |  | 
| Ezio Melotti | 5569e9b | 2011-04-22 01:42:10 +0300 | [diff] [blame] | 1719 | In most typical applications, :meth:`~ArgumentParser.parse_args` will take | 
 | 1720 | care of formatting and printing any usage or error messages.  However, several | 
 | 1721 | formatting methods are available: | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 1722 |  | 
| Georg Brandl | e0bf91d | 2010-10-17 10:34:28 +0000 | [diff] [blame] | 1723 | .. method:: ArgumentParser.print_usage(file=None) | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 1724 |  | 
 | 1725 |    Print a brief description of how the :class:`ArgumentParser` should be | 
| R. David Murray | 32e1771 | 2010-12-18 16:39:06 +0000 | [diff] [blame] | 1726 |    invoked on the command line.  If *file* is ``None``, :data:`sys.stdout` is | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 1727 |    assumed. | 
 | 1728 |  | 
| Georg Brandl | e0bf91d | 2010-10-17 10:34:28 +0000 | [diff] [blame] | 1729 | .. method:: ArgumentParser.print_help(file=None) | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 1730 |  | 
 | 1731 |    Print a help message, including the program usage and information about the | 
| Georg Brandl | e0bf91d | 2010-10-17 10:34:28 +0000 | [diff] [blame] | 1732 |    arguments registered with the :class:`ArgumentParser`.  If *file* is | 
| R. David Murray | 32e1771 | 2010-12-18 16:39:06 +0000 | [diff] [blame] | 1733 |    ``None``, :data:`sys.stdout` is assumed. | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 1734 |  | 
 | 1735 | There are also variants of these methods that simply return a string instead of | 
 | 1736 | printing it: | 
 | 1737 |  | 
| Georg Brandl | e0bf91d | 2010-10-17 10:34:28 +0000 | [diff] [blame] | 1738 | .. method:: ArgumentParser.format_usage() | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 1739 |  | 
 | 1740 |    Return a string containing a brief description of how the | 
 | 1741 |    :class:`ArgumentParser` should be invoked on the command line. | 
 | 1742 |  | 
| Georg Brandl | e0bf91d | 2010-10-17 10:34:28 +0000 | [diff] [blame] | 1743 | .. method:: ArgumentParser.format_help() | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 1744 |  | 
 | 1745 |    Return a string containing a help message, including the program usage and | 
 | 1746 |    information about the arguments registered with the :class:`ArgumentParser`. | 
 | 1747 |  | 
 | 1748 |  | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 1749 | Partial parsing | 
 | 1750 | ^^^^^^^^^^^^^^^ | 
 | 1751 |  | 
| Georg Brandl | e0bf91d | 2010-10-17 10:34:28 +0000 | [diff] [blame] | 1752 | .. method:: ArgumentParser.parse_known_args(args=None, namespace=None) | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 1753 |  | 
| Georg Brandl | 1d827ff | 2011-04-16 16:44:54 +0200 | [diff] [blame] | 1754 | Sometimes a script may only parse a few of the command-line arguments, passing | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 1755 | the remaining arguments on to another script or program. In these cases, the | 
| Ezio Melotti | 5569e9b | 2011-04-22 01:42:10 +0300 | [diff] [blame] | 1756 | :meth:`~ArgumentParser.parse_known_args` method can be useful.  It works much like | 
| Benjamin Peterson | 98047eb | 2010-03-03 02:07:08 +0000 | [diff] [blame] | 1757 | :meth:`~ArgumentParser.parse_args` except that it does not produce an error when | 
 | 1758 | extra arguments are present.  Instead, it returns a two item tuple containing | 
 | 1759 | the populated namespace and the list of remaining argument strings. | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 1760 |  | 
 | 1761 | :: | 
 | 1762 |  | 
 | 1763 |    >>> parser = argparse.ArgumentParser() | 
 | 1764 |    >>> parser.add_argument('--foo', action='store_true') | 
 | 1765 |    >>> parser.add_argument('bar') | 
 | 1766 |    >>> parser.parse_known_args(['--foo', '--badger', 'BAR', 'spam']) | 
 | 1767 |    (Namespace(bar='BAR', foo=True), ['--badger', 'spam']) | 
 | 1768 |  | 
 | 1769 |  | 
 | 1770 | Customizing file parsing | 
 | 1771 | ^^^^^^^^^^^^^^^^^^^^^^^^ | 
 | 1772 |  | 
| Benjamin Peterson | 98047eb | 2010-03-03 02:07:08 +0000 | [diff] [blame] | 1773 | .. method:: ArgumentParser.convert_arg_line_to_args(arg_line) | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 1774 |  | 
| Georg Brandl | e0bf91d | 2010-10-17 10:34:28 +0000 | [diff] [blame] | 1775 |    Arguments that are read from a file (see the *fromfile_prefix_chars* | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 1776 |    keyword argument to the :class:`ArgumentParser` constructor) are read one | 
| Benjamin Peterson | 98047eb | 2010-03-03 02:07:08 +0000 | [diff] [blame] | 1777 |    argument per line. :meth:`convert_arg_line_to_args` can be overriden for | 
 | 1778 |    fancier reading. | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 1779 |  | 
| Georg Brandl | e0bf91d | 2010-10-17 10:34:28 +0000 | [diff] [blame] | 1780 |    This method takes a single argument *arg_line* which is a string read from | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 1781 |    the argument file.  It returns a list of arguments parsed from this string. | 
 | 1782 |    The method is called once per line read from the argument file, in order. | 
 | 1783 |  | 
 | 1784 |    A useful override of this method is one that treats each space-separated word | 
 | 1785 |    as an argument:: | 
 | 1786 |  | 
 | 1787 |     def convert_arg_line_to_args(self, arg_line): | 
 | 1788 |         for arg in arg_line.split(): | 
 | 1789 |             if not arg.strip(): | 
 | 1790 |                 continue | 
 | 1791 |             yield arg | 
 | 1792 |  | 
 | 1793 |  | 
| Georg Brandl | 9375492 | 2010-10-17 10:28:04 +0000 | [diff] [blame] | 1794 | Exiting methods | 
 | 1795 | ^^^^^^^^^^^^^^^ | 
 | 1796 |  | 
 | 1797 | .. method:: ArgumentParser.exit(status=0, message=None) | 
 | 1798 |  | 
 | 1799 |    This method terminates the program, exiting with the specified *status* | 
 | 1800 |    and, if given, it prints a *message* before that. | 
 | 1801 |  | 
 | 1802 | .. method:: ArgumentParser.error(message) | 
 | 1803 |  | 
 | 1804 |    This method prints a usage message including the *message* to the | 
| Senthil Kumaran | 86a1a89 | 2011-08-03 07:42:18 +0800 | [diff] [blame] | 1805 |    standard error and terminates the program with a status code of 2. | 
| Georg Brandl | 9375492 | 2010-10-17 10:28:04 +0000 | [diff] [blame] | 1806 |  | 
| Raymond Hettinger | 677e10a | 2010-12-07 06:45:30 +0000 | [diff] [blame] | 1807 | .. _upgrading-optparse-code: | 
| Georg Brandl | 9375492 | 2010-10-17 10:28:04 +0000 | [diff] [blame] | 1808 |  | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 1809 | Upgrading optparse code | 
 | 1810 | ----------------------- | 
 | 1811 |  | 
| Ezio Melotti | 5569e9b | 2011-04-22 01:42:10 +0300 | [diff] [blame] | 1812 | Originally, the :mod:`argparse` module had attempted to maintain compatibility | 
| Ezio Melotti | 0ee9c1b | 2011-04-21 16:12:17 +0300 | [diff] [blame] | 1813 | with :mod:`optparse`.  However, :mod:`optparse` was difficult to extend | 
 | 1814 | transparently, particularly with the changes required to support the new | 
 | 1815 | ``nargs=`` specifiers and better usage messages.  When most everything in | 
 | 1816 | :mod:`optparse` had either been copy-pasted over or monkey-patched, it no | 
 | 1817 | longer seemed practical to try to maintain the backwards compatibility. | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 1818 |  | 
| Ezio Melotti | 0ee9c1b | 2011-04-21 16:12:17 +0300 | [diff] [blame] | 1819 | A partial upgrade path from :mod:`optparse` to :mod:`argparse`: | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 1820 |  | 
| Ezio Melotti | 5569e9b | 2011-04-22 01:42:10 +0300 | [diff] [blame] | 1821 | * Replace all :meth:`optparse.OptionParser.add_option` calls with | 
 | 1822 |   :meth:`ArgumentParser.add_argument` calls. | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 1823 |  | 
 | 1824 | * Replace ``options, args = parser.parse_args()`` with ``args = | 
| Georg Brandl | c900708 | 2011-01-09 09:04:08 +0000 | [diff] [blame] | 1825 |   parser.parse_args()`` and add additional :meth:`ArgumentParser.add_argument` | 
 | 1826 |   calls for the positional arguments. | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 1827 |  | 
 | 1828 | * Replace callback actions and the ``callback_*`` keyword arguments with | 
 | 1829 |   ``type`` or ``action`` arguments. | 
 | 1830 |  | 
 | 1831 | * Replace string names for ``type`` keyword arguments with the corresponding | 
 | 1832 |   type objects (e.g. int, float, complex, etc). | 
 | 1833 |  | 
| Benjamin Peterson | 98047eb | 2010-03-03 02:07:08 +0000 | [diff] [blame] | 1834 | * Replace :class:`optparse.Values` with :class:`Namespace` and | 
 | 1835 |   :exc:`optparse.OptionError` and :exc:`optparse.OptionValueError` with | 
 | 1836 |   :exc:`ArgumentError`. | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 1837 |  | 
 | 1838 | * Replace strings with implicit arguments such as ``%default`` or ``%prog`` with | 
| Ezio Melotti | cca4ef8 | 2011-04-21 15:26:46 +0300 | [diff] [blame] | 1839 |   the standard Python syntax to use dictionaries to format strings, that is, | 
| Benjamin Peterson | 698a18a | 2010-03-02 22:34:37 +0000 | [diff] [blame] | 1840 |   ``%(default)s`` and ``%(prog)s``. | 
| Steven Bethard | 5971096 | 2010-05-24 03:21:08 +0000 | [diff] [blame] | 1841 |  | 
 | 1842 | * Replace the OptionParser constructor ``version`` argument with a call to | 
 | 1843 |   ``parser.add_argument('--version', action='version', version='<the version>')`` |