I want to specify a required argument called inputdir
but I also would like to have a shorthand version of it called i
. I don't see a concise solution to do this without making both optional arguments and then doing my own check. Is there a preferred practice for this that I'm not seeing or the only way is to make both optional and do my own error-handling?
Here is my code:
import argparse parser = argparse.ArgumentParser() parser.add_argument("inputdir", help="Specify the input directory") parser.parse_args()
To add an optional argument, simply omit the required parameter in add_argument() . args = parser. parse_args()if args.
The argparse module provides a convenient interface to handle command-line arguments. It displays the generic usage of the program, help, and errors. The parse_args() function of the ArgumentParser class parses arguments and adds value as an attribute dest of the object.
The store_true option automatically creates a default value of False. Likewise, store_false will default to True when the command-line argument is not present.
For flags (options starting with -
or --
) pass in options with the flags. You can specify multiple options:
parser.add_argument('-i', '--inputdir', help="Specify the input directory")
See the name or flags option documentation:
The
add_argument()
method must know whether an optional argument, like-f
or--foo
, or a positional argument, like a list of filenames, is expected. The first arguments passed toadd_argument()
must therefore be either a series of flags, or a simple argument name.
Demo:
>>> import argparse >>> parser = argparse.ArgumentParser() >>> parser.add_argument('-i', '--inputdir', help="Specify the input directory") _StoreAction(option_strings=['-i', '--inputdir'], dest='inputdir', nargs=None, const=None, default=None, type=None, choices=None, help='Specify the input directory', metavar=None) >>> parser.print_help() usage: [-h] [-i INPUTDIR] optional arguments: -h, --help show this help message and exit -i INPUTDIR, --inputdir INPUTDIR Specify the input directory >>> parser.parse_args(['-i', '/some/dir']) Namespace(inputdir='/some/dir') >>> parser.parse_args(['--inputdir', '/some/dir']) Namespace(inputdir='/some/dir')
However, the first element for required arguments is just a placeholder. -
and --
options are always optional (that's the command line convention), required arguments are never specified with such switches. Instead the command-line help will show where to put required arguments with a placeholder based on the first argument passed to add_argument()
, which is to be passed in without dashes.
If you have to break with that convention and use an argument starting with -
or --
that is required anyway, you'll have to do your own checking:
args = parser.parse_args() if not args.inputdir: parser.error('Please specify an inputdir with the -i or --inputdir option')
Here the parser.error()
method will print the help information together with your error message, then exit.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With