Ich verwende die Aktion von argparse, um einer Klasse verschiedene Daten hinzuzufügen. Ich möchte diese Aktion für den Standardwert verwenden, wenn dieses Argument nicht in der Befehlszeile angegeben wird. Ist das möglich? Danke!
argparse
verwendet das action
nicht, wenn Sie default
anwenden. Es verwendet nur setattr
. Es kann den type
verwenden, wenn der Standardwert eine Zeichenfolge ist. Aber Sie können action
direkt aufrufen.
Hier verwende ich eine benutzerdefinierte Aktionsklasse, die aus der Dokumentation entlehnt ist. In der ersten parse_args
passiert nichts. Dann erstelle ich ein neues namespace
und rufe die Aktion für den Standard auf. Dann übergebe ich diesen Namensraum an parse_args
. Um das zu verstehen, müssen Sie es in eine interaktive Shell importieren und die Attribute des Namespace und der Aktion untersuchen.
welches produziert:
%Vor%Ich habe die Ausgabe so angepasst, dass sie hervorhebt, wenn die Aktion verwendet wird.
Hier können Sie eine spezielle Aktion für ein Argument ausführen, das nicht in der Befehlszeile angegeben ist (oder mit einem Wert == für den Standardwert angegeben wird). Es ist eine Vereinfachung der Klasse in Ссылка .
%Vor% Die Eingabe erfolgt nach parse_args
. Ich sehe keinen Grund, parse_args
erneut aufzurufen.
Ich musste den Benutzer auffordern, wenn eine Option nicht angegeben wurde - so habe ich es gemacht:
%Vor% Ich bin interessiert, ob das irgendwie gemacht werden kann, ohne die Argumente analysieren zu müssen ( import sys
). Vielleicht einige Konstruktoroptionen für argparse.Action
?