14

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 Answer 1

21

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 
Sign up to request clarification or add additional context in comments.

2 Comments

Can you provide a complete example of how to achieve that with parser.add_argument()?
@OmryYadan added, thanks for the feedback. Note that the linked docs contain a few more examples.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.