Wie Sie argparse.FileType stoppen, indem Sie die als Standard angegebene Datei erstellen

8

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?

    
John Gill 27.09.2013, 16:11
quelle

1 Antwort

3

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

verschoben %Vor%

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:

%Vor%     
hpaulj 27.09.2013 21:07
quelle

Tags und Links