2012-10-06 10 views
6

Il seguente codice dovrebbe stampare da 1 a 10 con intervalli di 1 secondo in mezzo, tuttavia è in attesa di 10 secondi prima di stampare effettivamente qualcosa e quindi stampa tutto subito. Come posso annullare l'output?Python sys.stdout.flush() non funziona

import sys 
import time 
for count in range(10) : 
    sys.stdout.write(str(count)) 
    sys.stdout.flush() 
    time.sleep(1) 

risposta

0

Python 2.7, 3.2 e 3.3 non consentono tutti gli argomenti delle parole chiave nella chiamata di scrittura. È questo il codice corretto? La funzione di stampa ovviamente consente la parola chiave di fine e non deve essere confusa con la scrittura. Scrivi non aggiunge un carattere di nuova riga.

La rimozione dell'argomento della parola chiave 'end' e il test mostrano che il codice funziona correttamente.

+1

Grazie per la risposta rapida ... È stato un errore ... anche senza la fine = "" il codice si ferma ancora prima di stampare tutto in una volta – user1724351

+0

Sono completamente e assolutamente incapace di riprodurre il problema. Riesci a ridurlo a una versione specifica di Python provandone altri? Quale sistema operativo? – whardier

+0

Mac OSX con python 3.2.3. Semplicemente non unbuffer – user1724351

1

trovato il problema

import sys 
import time 
for count in range(10) : 
    sys.stdout.write("\b%s" % count) 
    sys.stdout.flush() 
    time.sleep(.1) 

Non so perché pitone è strano come questo, ma a quanto pare ha accettato questo. Il tuo codice avrebbe funzionato bene, ma immagino che a Python non piacessi.

+1

Io uso python 3.3 btw quindi potrebbe essere diverso in altre versioni. Ho fatto ulteriori ricerche e ho scoperto che l'argomento in print "end =" \ r "" cancella il buffer in modo da non dover importare sys e se si esegue un ciclo su qualsiasi cosa si stampa sostituirà qualsiasi cosa appena stampata. Ciò conferisce all'output un aspetto davvero interessante – Alexander