argparse optional value for argument

3.3k views Asked by At

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.

1

There are 1 answers

2
jonrsharpe On BEST ANSWER

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