Mi manca qualcosa di ovvio. L'obiettivo è utilizzare argparse con il primo parametro richiesto, un secondo opzionale e qualsiasi altro parametro facoltativo.Python argparse: Combina parametri facoltativi con nargs = argparse.REMAINDER
Per mostrare il problema sono stati eseguiti due parser di test; l'unica differenza tra loro è l'uso di nargs = argparse.REMAINDER in uno e nargs = '*' nell'altro.
def doParser1(argsin):
parser = argparse.ArgumentParser(description='Parser demo.')
parser.add_argument('req1', help='first required parameter')
parser.add_argument('--opt1', help='first optional parameter')
parser.add_argument('leftovers', nargs=argparse.REMAINDER,
help='all the other parameters')
argsout = parser.parse_args(args=argsin)
print argsout
return argsout
def doParser2(argsin):
parser = argparse.ArgumentParser(description='Parser demo.')
parser.add_argument('req1', help='first required parameter')
parser.add_argument('--opt1', help='first optional parameter')
parser.add_argument('leftovers', nargs='*',
help='all the other parameters')
argsout = parser.parse_args(args=argsin)
print argsout
return argsout
Se non ci sono parametri aggiuntivi, parser2 funziona. Questo è l'ingresso seguito da parser1 e parser 1:
input: ['req1value', '--opt1', 'opt1value']
Namespace(leftovers=['--opt1', 'opt1value'], opt1=None, req1='req1value')
Namespace(leftovers=None, opt1='opt1value', req1='req1value')
Se ci sono dei parametri aggiuntivi, il valore opt1 è mancato in parser1 e parser2 ottiene solo confuso:
input: ['req1value', '--opt1', 'opt1value', 'r1', 'r2']
Namespace(leftovers=['--opt1', 'opt1value', 'r1', 'r2'], opt1=None, req1='req1value')
usage: py-argparse.py [-h] [--opt1 OPT1]
[-leftovers [LEFTOVERS [LEFTOVERS ...]]]
req1
py-argparse.py: error: unrecognized arguments: r1 r2
Il risultato atteso dovrebbe essere:
Namespace(leftovers=['r1', 'r2'], opt1='opt1value', req1='req1value')
Sembra che questo dovrebbe essere un caso semplice e ciò che è qui è semplificato da quello che sto provando a fare davvero. Ho provato a rendere gli avanzi facoltativi, aggiungendo una varietà di altre opzioni, ma niente funziona meglio.
Qualsiasi aiuto sarebbe apprezzato.
Sapevo che doveva essere qualcosa di semplice. Non l'ho visto ovunque nei documenti, ma funziona con nargs = argparse.REMAINDER, e questo è tutto ciò di cui ho bisogno. Grazie. – OPunWide