sollte Mein Programm die folgenden Optionen enthalten, ordnungsgemäß von argparse analysiert:Python 2.7 argparse: Wie verschachteln optionale mutale exklusive Argumente richtig?
- rein optional:
[-h, --help]
und[-v, --version]
- gegenseitig aus:
[-f FILE, --file FILE]
und[-u URL, --url URL]
- optional, wenn
--url
gewählt wurde:[-V, --verbose]
- erforderlich wenn entweder
--file
oder--url
gewählt wurde:[-F, --format FORMAT]
Das würde gewünschte Nutzungsmuster sein:
prog.py [-h] [-v] [-f FILE (-F FORMAT) | -u URL [-V] (-F FORMAT) ]
mit dem -F
Anforderung beide Mitglieder der Gruppe sich gegenseitig ausschließe Anwendung.
Nicht sicher, ob es eher ein positional ist.
So soll es möglich sein, zu laufen:
prog.py -u "http://foo.bar" -V -F csv
und den Parser für den Fall, schreit ich die -F
vergessen (wie er soll).
Was ich bisher getan haben:
parser = ArgumentParser(decription='foo')
group = parser.add_mutually_exclusive_group()
group.add_argument('-f','--file', nargs=1, type=str, help='')
group.add_argument('-u','--url', nargs=1, type=str, help='')
parser.add_argument('-V','--verbose', action='store_true', default=False, help='')
parser.add_argument('-F','--format', nargs=1, type=str, help='')
Da es ein ‚Vanille-Modus‘ hat ohne Befehlszeilenargumente ausführen können, müssen alle Argumente optional sein.
Wie kann ich Punkte 3. und 4. in meinen Code implementieren?
EDIT:
I -f
und -u
als subparsers versucht, wie here beschrieben, aber Subbefehle scheinen, wie positionals behandelt werden und der Parser gibt mir eine error: too few arguments
, wenn ich es ohne Argumente laufen.
Haben Sie [docopt] (http://docopt.org/) berücksichtigt? Der Nachteil ist, dass Optionswerte mit '-' beginnen können (zB' -fa -F -u '(das Format ist hier "-u")] (https://gist.github.com/zed)/b94e3e9945debe25826d) – jfs
Wird eines von '-f' und' -u' benötigt? Wenn das der Fall ist, stelle ich mir eine Lösung vor, die Unterbefehle oder Positionsargumente enthält. – chepner
@chepner: Nein, sind sie nicht. Ich möchte, dass das Programm auch ohne Argumente und Optionen läuft, so dass es einen Benutzerdialog oder sogar eine GUI startet. – ferkulat