Python-argparse Beispiel?
Ich versuche zu lernen argparse, um es zu benutzen in meinem Programm, die syntax sollte wie folgt sein:
-a --aLong <String> <String>
-b --bLong <String> <String> <Integer>
-c --cLong <String>
-h --help
Habe ich diesen code:
#!/usr/bin/env python
#coding: utf-8
import argparse
if __name__ == '__main__':
parser = argparse.ArgumentParser(description='Lorem Ipsum')
parser.add_argument('-a','--aLong', help='Lorem Ipsum', required=False)
parser.add_argument('-b','--bLong', help='Lorem Ipsum', required=False)
parser.add_argument('-c','--cLong', help='Lorem Ipsum', required=False)
parser.add_argument('-h','--help', help='Lorem Ipsum', required=False)
parser.parse_args()
Die Frage ist, lese ich in der offiziellen doc, sahen YouTube-videos, etc, aber ich konnte nicht verstehen, wie kann ich bestimmen, die Anzahl der "sub-Argumente" von der "main-argument"?
Beispiel: myApp.py -b Foobar 9000
, wie kann ich einstellen, dass -b
müssen zwei "sub-Argumente", und wie bekomme ich die Werte, die Foobar
und 9000
?
Und anderen Zweifel, ich weiß, ich kann ein argument zu sein required
oder nicht, aber ich wollte mein Programm nur ausgeführt wird, wenn mindestens eine argument übergeben wird, wird jede der vier genannten.
Vielleicht ist es eine blöde Frage, aber sorry, ich kann es nicht verstehen, und hoffentlich gibt es hier jemanden mit "Lehrer-Kräfte" zu erklären.
argument-groups
nicht helfen. Sie beeinflussen die help
anzeigen, aber nicht beeinflussen analysieren. Prüfung nach dem Parsen als FMc macht, ist die Art und Weise, um sicherzustellen, eines der 3 Argumente. Gegenseitig ausschließlich Gruppen können verwendet werden, um zu verhindern, dass mehr als 1 in der Gruppe verwendet wird, aber der OP will 'mindestens ein'.InformationsquelleAutor JChris | 2014-01-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
python-3.x
tag, aber diese Antwort ist Python 2.Noch nicht ganz dort: in Python 3
filter
gibt einen iterator, nicht eine Liste. Sie schreiben sollteif not any([opts.a, opts.b, opts.c]):
statt.Danke, ich hab es jetzt. Nur ein wenig Zweifel: ich war versucht, so etwas wie dieses:
'-a', '--aLong'
, aber wenn ich das mache, wenn ich rufeopts.a
es gibt mir eine Fehlermeldung -AttributeError: 'Namespace' object has no attribute 'a'
, so habe ich zu nennenopts.aLong
, warum?Hinzufügen eines dest argument
parser.add_argument('-a','--aLong', dest='a' ...)
OP will auch
-b
zu akzeptieren 2 strings und 1 integer.argparse
nicht verarbeiten können, dass direkt. Eine benutzerdefinierte Aktion machen könnte, aber das ist ein Thema für fortgeschrittene.InformationsquelleAutor FMc
Den Schlüssel zu diesem ist das definieren eine notwendige, sich gegenseitig ausschließenden Gruppe.
InformationsquelleAutor user3366598