Mi chiedevo se è possibile avere un argomento posizionale seguire un argomento con un parametro facoltativo. Idealmente l'ultimo argomento inserito nella riga di comando si applica sempre a "testname".argparse prima dell'argomento posizionale
import argparse
parser = argparse.ArgumentParser(description='TAF')
parser.add_argument('-r','--release',nargs='?',dest='release',default='trunk')
parser.add_argument('testname',nargs='+')
args = parser.parse_args()
Vorrei entrambe queste chiamate ad avere SmokeTest applicarsi a nometest, ma il secondo genera un errore.
>> python TAF.py -r 1.0 smoketest
>> python TAF.py -r smoketest
TAF.py: error: too few arguments
mi rendo conto che spostare l'argomento posizionale al fronte comporterebbe il corretto comportamento del parametro opzionale, tuttavia questo non è del tutto il formato sto cercando. La bandiera delle scelte sembra un'alternativa interessante, tuttavia genera un errore invece di ignorare l'oggetto non abbinato.
MODIFICA: Ho trovato un modo per aggirare questo. Se qualcuno ha una soluzione migliore lo apprezzerei.
import argparse
parser = argparse.ArgumentParser(description='TAF')
parser.add_argument('-r','--release',nargs='?',dest='release',default='trunk')
parser.add_argument('testname',nargs=argparse.REMAINDER)
args = parser.parse_args()
if not args.testname:
args.testname = args.release
args.release = ''
Grazie per la risposta. Sono d'accordo che può essere fatto in modo pulito sia aggiungendo un prefisso per l'argomento testname, o come ho detto solo elencandoli prima dell'altro argomento. –