I would like to have the following syntax:
python utility.py file1 FILE1 file2 FILE2
where file1 and file2 are optional arguments. It is simple to make it working with this syntax:
python utility.py --file1 FILE1 --file2 FILE2
using
parser.add_argument('--file1',type=file)
parser.add_argument('--file2',type=file)
however, if I remove the dashes, argparse starts to interprete it as a positional rather than optional argument...
In other words, is it possible to specifically tell argparse whether an argument is optional or positional so that I can have optional parameters without the dashes?
There is no way to get
argparse
to do this for you. However, you can makeargparse
accept any number of positional arguments:Of course, you may want to add some checks to make sure that at least 1 file was given, etc.
EDIT
I'm still not 100% sure what you want here, but if
file1
andfile2
are literal strings, you can work around that a little bit by preprocessingsys.argv
. Of course, this will still format your help message strangely, but you can always add an epilog explaining that either form is OK:Another Example would be:
then you can just run this code with arguments without dash
And, in ascending order