Ist es möglich einen Alias ​​für sys.stdout in Python zu haben?

7

Betrachten Sie diesen Beispiel-Python-Code. Es liest von stdin und schreibt in eine Datei.

%Vor%

Angenommen, ich möchte dasselbe Programm so modifizieren, dass es stattdessen in stdout schreibt. Dann muss ich jede Instanz von f.write() durch sys.stdout.write() ersetzen. Aber das wäre zu langweilig. Ich möchte wissen, ob es eine Möglichkeit gibt, f als Alias ​​für sys.stdout anzugeben, so dass f.write() als sys.stdout.write() behandelt wird.

    
CodeBlue 23.07.2013, 18:44
quelle

4 Antworten

11

Tu es einfach

%Vor%

Jetzt müssen Sie nur noch f = sys.stdout anstelle von f = open(fileName) eingeben. (Und f.close() entfernen)

Auch , Bitte beachten Sie die folgende Syntax für Dateien.

%Vor%

Die Datei wird auf diese Weise automatisch für Sie geschlossen.

    
Sukrit Kalra 23.07.2013, 18:46
quelle
14

Namen in Python sind nur Bindungen. Deshalb:

%Vor%

bindet nur den Namen f an das Objekt , das auch an sys.stdout ... gebunden ist

Beachten Sie, dass alle Änderungen, die Sie an diesem Punkt an f oder sys.stdout vornehmen, sich auf beide auswirken. Also tun Sie nicht f.close() wie du normalerweise sys.stdout.close() ... nicht machen würdest ...

    
R.A.B.B.I.T 23.07.2013 18:50
quelle
3

Ja, in Python können Sie jede Klasse / Funktion / Methode usw. aliasieren. Weisen Sie einfach den Wert, den Sie verwenden möchten, einer anderen Variablen zu:

%Vor%

Nun wird jede Methode, die Sie auf f aufrufen, auf sys.stdout aufgerufen. Sie können dies mit allem tun, was Sie möchten, zum Beispiel auch mit i = sys.stdin etc.

    
pascalhein 23.07.2013 18:47
quelle
0

Das ist sowieso die Aufgabe einer Shell; Senden Sie es einfach an standard out und leiten Sie es mit >filename in eine Datei um, wenn Sie das Skript aufrufen.

    
kindall 23.07.2013 19:16
quelle

Tags und Links