Ich liebe das Modul argparse
. argparse.FileType
ist auch hilfreich, es sei denn, Sie möchten, dass der Standardwert nicht sys.std*
ist, da die Standardausgabedatei erstellt wird, selbst wenn Sie eine angeben
Wert.
Zum Beispiel:
%Vor%erstellt out.txt, selbst wenn Sie eine Datei mit --outfile angeben.
Das Beste, was ich mir vorstellen kann, ist:
%Vor%Aber wenn sich das so leichter anfühlen sollte, fehlt mir etwas?
Es gab eine relativ neue Änderung in argparse
, Ссылка (Aug 2012), die die Auswertung des Vorschlagswerts verzögert . Ursprünglich würde ein String-Standard zu Beginn des Parsens durch type
(via _get_value
) übergeben werden, was zum Öffnen (und Erstellen) einer FileType-Datei führen würde (ob sie benötigt würde oder nicht). In diesem Patch wird die Zeichenfolge in den Namespace geschrieben, aber erst am Ende der Analyse ausgewertet, wenn festgestellt werden kann, ob ein anderer Wert angegeben wurde oder nicht. Grundsätzlich wurde diese Zeile von früh in parse_known_args
an das Ende von _parse_known_args
In Ссылка habe ich einen Patch vorgeschlagen, der einen FileContext
-Typ enthält. Der Hauptunterschied zu FileType
besteht darin, dass open(file...)
in partial
eingeschlossen wird. Auf diese Weise wird die Datei nicht geöffnet (oder erstellt), bis sie tatsächlich in einem with args.output() as f:
-Kontext verwendet wird.
Dieser Patch behandelt einige andere Dinge wie das Testen, ob die Datei erstellt werden kann oder nicht (mit os.access
) und das Wrapping von stdin/out
in einem Dummy-Kontext, so dass es nicht versucht, es zu schließen.
Ohne zu testen, könnten Sie FileType
folgendermaßen ändern: