2013-07-23 20 views
7

Considera questo esempio di codice python. Legge dallo stdin e scrive su un file.È possibile avere un alias per sys.stdout in python?

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() 

Supponiamo di voler modificare questo stesso programma per scrivere su stdout. Quindi, dovrò sostituire ogni istanza di f.write() con sys.stdout.write(). Ma sarebbe troppo noioso. Voglio sapere se esiste un modo per specificare f come alias per sys.stdout, in modo che f.write() venga considerato come sys.stdout.write().

+4

Che ne dite di 'f = sys.stdout'? –

+1

@AdamRosenfield, se funziona, per favore fallo una risposta! Sono un principiante di Python. – CodeBlue

+0

@CodeBlue ci dici – Stephan

risposta

11

Basta fare

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

Ora è solo bisogno di fare f = sys.stdout invece di f = open(fileName). (E rimuovere f.close())

Anche, Si prega di considerare l'utilizzo della seguente sintassi per i file.

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

Il file viene automaticamente chiuso per te in questo modo.

3

Sì, in python, è possibile alias ogni classe/funzione/metodo ecc Basta assegnare il valore che si desidera utilizzare per un'altra variabile:

import sys 
f = sys.stdout 

Ora ogni metodo si chiama il f otterrà invitato sys.stdout. Puoi farlo con qualsiasi cosa tu voglia, ad esempio anche con i = sys.stdin ecc.

+0

Tranne non 'in = sys.stdin', perché' SyntaxError: invalid syntax' – Eric

+0

@Eric: scusa, ho dimenticato che 'in' è una parola chiave – pascalhein

14

I nomi in Python sono solo collegamenti. Pertanto:

f = sys.stdout 

Basta lega il nome f-l'oggetto che è anche legato-sys.stdout ...

Nota che, dal momento che sono entrambi lo stesso oggetto, tutte le modifiche apportate al f o sys.stdout a questo punto influenzerà sia ... quindi non fare f.close() come si fa normalmente non vorrebbe fare sys.stdout.close() ...

+1

puoi anche fare il (molto) più approssimativo' sys.stdout = open ('some_file.txt', 'w'); ' –

0

Questo è in ogni caso il compito di una shell; basta inviarlo allo standard e reindirizzare a un file usando >filename quando si invoca lo script.

Problemi correlati