2013-07-23 4 views
7

Betrachten Sie diesen Beispiel-Python-Code. Es liest von stdin und schreibt in eine Datei.Ist es möglich, einen Alias ​​für sys.stdout in Python zu haben?

import sys 

arg1 = sys.argv[1] 

f = open(arg1,'w') 
f.write('<html><head><title></title></head><body>') 

for line in sys.stdin: 
    f.write("<p>") 
    f.write(line) 
    f.write("</p>") 

f.write("</body></html>") 
f.close() 

Angenommen, ich möchte dieses Programm ändern, um stattdessen auf stdout zu schreiben. 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.

+4

Wie wäre es mit 'f = sys.stdout'? –

+1

@AdamRosenfield, wenn das klappt, dann mach bitte eine Antwort! Ich bin ein Python-Neuling. – CodeBlue

+0

@CodeBlue Sie sagen uns – Stephan

Antwort

11

Just do

>>> import sys 
>>> f = sys.stdout 
>>> f.write('abc') 
abc 

Jetzt müssen Sie nur f = sys.stdout tun statt f = open(fileName). (Und entfernen f.close())

Auch, Bitte beachten Sie die Verwendung der folgenden Syntax für Dateien.

with open(fileName, 'r') as f: 
    # Do Something 

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

3

Ja, in Python, können Sie jede Klasse/Funktion/Methode alias usw. einfach den Wert, den Sie auf eine andere Variable verwenden möchten zuweisen:

import sys 
f = sys.stdout 

Jetzt jede Methode, die Sie auf f Anruf wird aufgerufen sys.stdout. Sie können dies mit was auch immer Sie möchten, zum Beispiel auch mit i = sys.stdin etc.

+0

Außer nicht 'in = sys.stdin', weil' SyntaxError: ungültige Syntax' – Eric

+0

@Eric: sorry, vergaß '' '' sein ein Schlüsselwort – pascalhein

14

Namen in Python sind nur Bindungen. Deshalb:

f = sys.stdout 

bindet einfach den Namen f-das Objekt die auch-sys.stdout ...

Hinweis gebunden ist, dass, da sie beide das gleiche Objekt sind, alle Änderungen an f machen oder sys.stdout an dieser Stelle wirkt sich beide ... Also nicht tun f.close() wie Sie normalerweise nicht sys.stdout.close() tun wollen ...

+1

können Sie auch die (viel) mehr skizzenhaften 'sys.stdout = offen ('some_file.txt', 'w'); ' –

0

Das ist sowieso die Aufgabe einer Shell; Senden Sie es einfach an den Standardausgang und leiten Sie es beim Aufruf des Skripts mithilfe von >filename in eine Datei um.

Verwandte Themen