argparse optional value for argument

2019-06-19 16:50发布

问题:

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:

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.