Per bandiere (opzioni che iniziano con -
o --
) passano nelle opzioni con le bandiere. È possibile specificare più opzioni:
parser.add_argument('-i', '--inputdir', help="Specify the input directory")
Vedere il name or flags option documentation:
Il metodo add_argument()
deve sapere se un argomento opzionale, come -f
o --foo
, o un argomento posizionale, come una lista di nomi di file, è previsto. I primi argomenti passati a add_argument()
devono quindi essere una serie di flag o un semplice nome di argomento.
Demo:
>>> import argparse
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('-i', '--inputdir', help="Specify the input directory")
_StoreAction(option_strings=['-i', '--inputdir'], dest='inputdir', nargs=None, const=None, default=None, type=None, choices=None, help='Specify the input directory', metavar=None)
>>> parser.print_help()
usage: [-h] [-i INPUTDIR]
optional arguments:
-h, --help show this help message and exit
-i INPUTDIR, --inputdir INPUTDIR
Specify the input directory
>>> parser.parse_args(['-i', '/some/dir'])
Namespace(inputdir='/some/dir')
>>> parser.parse_args(['--inputdir', '/some/dir'])
Namespace(inputdir='/some/dir')
Tuttavia, il primo elemento di richiesti argomenti è solo un segnaposto. Le opzioni -
e --
sono sempre opzionale (che è la convenzione della riga di comando), gli argomenti obbligatori non vengono mai specificati con tali opzioni. Invece la guida della riga di comando mostrerà dove mettere gli argomenti richiesti con un segnaposto basato sul primo argomento passato a add_argument()
, che deve essere passato senza trattini.
Se si deve rompere con tale convenzione e utilizzare un argomento a partire -
o --
che è necessario in ogni caso , dovrete fare il proprio controllo:
args = parser.parse_args()
if not args.inputdir:
parser.error('Please specify an inputdir with the -i or --inputdir option')
Qui il parser.error()
method stamperà le informazioni di aiuto insieme al tuo messaggio di errore, quindi esci.
Grazie mille per il chiarimento! Apprezzo molto il tuo aiuto. – user3621633
La cosa che non mi piace, è che quando stampa l'uso, non stampa '-i' e' --inputdir'. Vorrei che l'uso fosse qualcosa come 'usage: [-h] [-i | --inputdir INPUTDIR]'; qualcosa in tal senso. Probabilmente un modo per farlo è usare 'add_mutually_exclusive_group()', ma a me sembra un po 'hacky. Mi chiedo se c'è un modo migliore. – searchengine27
@ searchengine27: dovrei personalizzare [help formatter class] (https://docs.python.org/2/library/argparse.html#formatter-class), temo. –