GNU getopt e strumenti da riga di comando che lo utilizzano, consentono l'interleazione di opzioni e argomenti, noti come opzioni di permutazione (vedere http://www.gnu.org/software/libc/manual/html_node/Using-Getopt.html#Using-Getopt). Anche il modulo Perl Getopt :: Long supporta questo (con qw (: config gnu_getopt)). argparse sembra non supportare (o nemmeno menzionare) le opzioni di permutazione.L'ordine di argomento permuto argparse di Python può essere simile a gnu getopt?
Ci sono molte domande SO relative all'argomento/opt order, ma nessuna sembra rispondere a questa domanda: Può essere fatto argparse per permutare l'ordine degli argomenti come getopt?
Il caso d'uso è una firma riga di comando prototipo come GNU sorta:
sort [opts] [files]
in cui 1) le opzioni ei file sono permutati, e 2) l'elenco dei file può contenere zero o più argomenti.
Ad esempio:
import argparse
p = argparse.ArgumentParser();
p.add_argument('files',nargs='*',default=['-']);
p.add_argument('-z',action='store_true')
p.parse_args(['-z','bar','foo']) # ok
p.parse_args(['bar','foo','-z']) # ok
p.parse_args(['bar','-z','foo']) # not okay
usage: ipython [-h] [-z] [files [files ...]]
ho provato:
- p.parse_known_args - non si lamenta, ma in realtà non permuto sia e non esitano sugli argomenti sembrano opzioni non valide (ad es. --bogus o -b sopra).
- p.add_argument ('files', nargs = argparse.REMAINDER) - opzione -z è incluso nel file a meno che prima args posizionali
- p.add_argument ('files', nargs = '*', azione =' aggiungere');
Voglio implementare qualcosa vicino al prototipo di ordinamento GNU di cui sopra. Non mi interessa un flag che possa essere specificato per ogni file (ad es. -f file1 -f file2).