Für Flaggen (Optionen beginnend mit -
oder --
) passieren in Optionen mit die Fahnen. Sie können mehrere Optionen angeben:
parser.add_argument('-i', '--inputdir', help="Specify the input directory")
der See name or flags option documentation:
Die add_argument()
Methode wissen muss, ob ein optionales Argument, wie -f
oder --foo
oder ein Positions Argument, wie eine Liste von Dateinamen ist erwartet. Die ersten Argumente, die an add_argument()
übergeben werden, müssen daher entweder eine Reihe von Flags oder ein einfacher Argumentname sein.
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')
jedoch das erste Element für erforderlich Argumente ist nur ein Platzhalter. -
und --
Optionen sind immer optional (das ist die Befehlszeile Konvention) erforderlich sind Argumente nie mit einem solchen Schalter angegeben. Stattdessen zeigt die Befehlszeilenhilfe an, wo die erforderlichen Argumente mit einem Platzhalter basierend auf dem ersten übergebenen Argument an add_argument()
übergeben werden, das ohne Bindestriche übergeben werden soll.
Wenn Sie mit dieser Konvention zu brechen und einen Streit mit -
oder --
Start verwenden, die ohnehin erforderlich ist, werden Sie Ihre eigene Kontrolle zu tun haben:
args = parser.parse_args()
if not args.inputdir:
parser.error('Please specify an inputdir with the -i or --inputdir option')
Hier die parser.error()
method drucken die Hilfe-Informationen zusammen mit Ihrer Fehlermeldung, dann beenden.
Vielen Dank für die Klarstellung! Ich schätze deine Hilfe sehr. – user3621633
Die Sache, die ich nicht mag, ist, dass, wenn es die Verwendung druckt, es "-i" und "--inputdir" nicht ausdruckt. Ich möchte, dass die Verwendung etwas wie "Verwendung: [-h] [-i | --inputdir INPUTDIR]" ist; etwas in diesem Sinne. Wahrscheinlich ist es eine Möglichkeit, 'add_mutual_exclusive_group()' zu benutzen, aber das scheint mir ein bisschen hacky zu sein. Ich frage mich, ob es einen besseren Weg gibt. – searchengine27
@ Suchmaschine27: Sie müssten die [help formatter Klasse] anpassen (https://docs.python.org/2/library/argparse.html#formatter-class), fürchte ich. –