Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

argparse optional value for argument

I want to distinguish between these three cases:

  • The flag is not present at all python example.py;
  • The flag is present but without a value python example.py -t; and
  • The flag is present and has a value python example.py -t ~/some/path.

How can I do this with Python argparse? The first two cases would be covered by action='store_true' but then the third case becomes invalid.

like image 782
danijar Avatar asked Jun 17 '15 16:06

danijar


1 Answers

You can do this with nargs='?':

One argument will be consumed from the command line if possible, and produced as a single item. If no command-line argument is present, the value from default will be produced. Note that for optional arguments, there is an additional case - the option string is present but not followed by a command-line argument. In this case the value from const will be produced.

Your three cases would give:

  1. The default value;
  2. The const value; and
  3. '~/some/path'

respectively. For example, given the following simple implementation:

from argparse import ArgumentParser

parser = ArgumentParser()
parser.add_argument('-t', nargs='?', default='not present', const='present without value')

print(parser.parse_args().t)

You'd get this output:

$ python test.py
not present

$ python test.py -t
present without value

$ python test.py -t 'passed a value'
passed a value
like image 82
jonrsharpe Avatar answered Oct 18 '22 20:10

jonrsharpe