2013-06-27 12 views
7

Desidero stampare alcune istruzioni di debug durante un ciclo nella mia funzione e io uso IPython per chiamare la funzione. Lasciò una funzione esempio essere:Come svuotare le istruzioni stampate in IPython

def test_print(): 
    import time 
    for i in range(5): 
     time.sleep(2) 
     print i, time.time() 

Il risultato è come segue:

0 1372337149.84 
1 1372337151.84 
2 1372337153.85 
3 1372337155.85 
4 1372337157.85 

mi aspetto ogni riga da stampare, quindi attendere 2 secondi. Ma il comportamento è il seguente. I primi osservare:

0 1372337149.84 
1 

Poi, dopo 2 secondi osservo il timestamp 1 e l'id della riga successiva, che è 2. Osservo finalmente l'ultimo timestamp. Non riuscivo a capire perché si comporta così invece di una riga alla volta. qualche idea? Ho bisogno di una funzione di scarico speciale per stampare ciò che è in attesa di essere stampato?

+0

Funziona normalmente per me. – Doorknob

+0

Utilizzo di CPython si comporta come previsto. Per Linux e Windows. – Elazar

+0

Sto utilizzando Canopy 1.0.1. Ha Python 2.7.3 64 bit in esso. – petrichor

risposta

11

Non ho mai utilizzato IPython, ma dovrebbe essere sufficiente per svuotare lo stdout dopo ogni istruzione print.

Qualcosa del genere dovrebbe funzionare ...

def test_print(): 
    import time 
    import sys 
    for i in range(5): 
     time.sleep(2) 
     print i, time.time() 
     sys.stdout.flush() 
+4

Ma, 'print' aggiunge automaticamente la nuova riga, quindi avrebbe dovuto essere scaricata comunque. – Elazar

+1

@ Elazar In CPython, forse. Forse IPython si comporta diversamente. – Aya

+0

Funziona ora, grazie mille. – petrichor

Problemi correlati