Mit optparse
gibt es eine einfache Möglichkeit, negative Optionen zu definieren, z. B. --no-cleanup
?
Ich habe es so gemacht, aber es ist umständlich und fehleranfällig, besonders wegen der None
check, die leicht zu vergessen und wegzulassen ist:
Idealerweise möchte ich etwas wie Getoptions::Long
in Perl machen, wo ich eine Option cleanup
als boolescher Wert definieren kann und dann automatisch --cleanup
und --no-cleanup
liefert und meine boolesche Variable entsprechend einstelle.
Wenn ich dies mit optparse (oder argparse) machen würde - vorausgesetzt, Sie wollen ein --cleanup und --no-cleanup Flag in einem Befehl hinzufügen, würde ich einfach die Option Parser-Klasse ableiten. Etwas wie:
%Vor%Natürlich ist das ein vollständiger Hack, aber ich denke, es ist ziemlich offensichtlich, wo ich damit hingehe ... Sie können boolesches Verhalten so gestalten, wie Sie es wollen (Neuformatierung von Hilfe, Annahme eines Default-Wertes, damit entweder ' --blah 'oder' --no-blah 'ist als Standard eingestellt, usw. ...)
Ich denke das
%Vor% sollte funktionieren und die Zeile if options.cleanup is None
loswerden, solange sie noch da ist, seit der Standard gesetzt ist, obwohl die Hilfemeldung wiederholt wird (mit dem von mir angegebenen Code)
Wenn Sie nur Standardwerte für ein bestimmtes Flag hinzufügen möchten (um die Überprüfung auf None
zu vermeiden), können Sie das Standardschlüsselwort für add_option, ODER, gemäß der optparse-Dokumentation verwenden ...
Eine klarere Methode zum Angeben von Standardwerten ist die Methode set_defaults () von OptionParser, die Sie jederzeit vor dem Aufruf von parse_args () aufrufen können: z.
parser.set_defaults(verbose=True)
optparse
ist veraltet. Sie können dies mit argparse
unter Verwendung einer Argumentgruppe tun:
Die Verwendung der Argumentgruppe verhindert die Angabe von --cleanup
und --no-cleanup
. Wenn kein Flag angegeben ist, wird args.cleanup
None
sein. Wenn Sie dies in True
oder False
ändern möchten, fügen Sie einfach das Schlüsselwort default
mit dem gewünschten Wert hinzu, wenn Sie das Argument --cleanup
der sich gegenseitig ausschließenden Gruppe hinzufügen.
Für Python 2.6-Benutzer können Sie pip install argparse
.