Negative boolesche Optionen - nein-was auch immer in optparse?

8

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:

%Vor%

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.

    
Frank 29.03.2012, 22:12
quelle

2 Antworten

4

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)

    
mgilson 29.03.2012 22:31
quelle
-1

optparse ist veraltet. Sie können dies mit argparse unter Verwendung einer Argumentgruppe tun:

%Vor%

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 .

    
wim 29.03.2012 22:34
quelle

Tags und Links