There is no way to get argparse
to do this for you. However, you can make argparse
accept any number of positional arguments:
parser.add_argument('FILES',nargs="*")
options=parser.parse_args()
file1,optional_files=options.FILES[0],options.FILES[1:]
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
and file2
are literal strings, you can work around that a little bit by preprocessing sys.argv
. Of course, this will still format your help message strangely, but you can always add an epilog explaining that either form is OK:
import argparse
import sys
mangle_args=('file1','file2')
arguments=['--'+arg if arg in mangle_args else arg for arg in sys.argv[1:]]
parser=argparse.ArgumentParser()
parser.add_argument('--file1')
parser.add_argument('--file2')
options=parser.parse_args(arguments)