Setzen Sie den Standardwert auf false, wenn ein anderes sich gegenseitig ausschließendes Argument wahr ist

8

Mir ist klar, dass dies viel wie Einstellung der Standardoption in Python von zwei sich gegenseitig ausschließenden Optionen mit dem argparse-Modul , obwohl aus einer anderen Perspektive (und die dort gegebenen Antworten scheinen nicht zu helfen).

Codeblock (Parser ist eine Instanz von argparse.ArgumentParser):

%Vor%

Wenn weder --show noch --insert angegeben sind, möchte ich auf --show (also default=True ) setzen, aber wenn --insert verwendet wird, dann wird opts.show immer noch auf true gesetzt (wegen der Vorgabe), obwohl sie Teil eines sich gegenseitig ausschließenden Blocks sind.

Der aktuelle Code überprüft, dass keine der anderen Optionen gesetzt wurde, wenn getestet wird, ob opt.show True ist, d.h.:

%Vor%

aber das skaliert nicht (was passiert, wenn du --delete zu der sich gegenseitig ausschließenden Gruppe hinzufügst usw.), also suche ich nach einer besseren Möglichkeit, jede andere Variable dazu zu bringen, opts.show false zu machen, solange sie noch vorhanden ist es als Standard.

Wenn ich die Argarse-Dokumente lese, denke ich, dass eine benutzerdefinierte Aktion der richtige Weg wäre, aber nicht sehen kann, wie ich auf die anderen Mitglieder der sich gegenseitig ausschließenden Gruppe zugreifen kann (die Theorie könnte ich über sie iterieren und spiegeln) der Standardwert, wenn einer der anderen festgelegt wurde). Die andere Option wäre, die if-Bedingungen umzukehren, aber das scheint unrein zu sein (wenn sich der Standard ändert, müsste sich auch die Reihenfolge der if-Anweisungen ändern).

    
tolien 06.09.2012, 15:33
quelle

1 Antwort

19

Es kommt mir vor, dass vielleicht 'store_const' eine geeignetere Aktion wäre (mit allen Argumenten, die auf dasselbe Ziel verweisen).

%Vor%

Jetzt können Sie args.mutex verwenden, um herauszufinden, welche Aktion ausgeführt werden soll.

    
mgilson 06.09.2012, 15:58
quelle