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.:
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).
Tags und Links python arguments argparse command-line-arguments