2013-06-27 1 views
7

Ich möchte einige Debug-Anweisungen während einer Schleife in meiner Funktion drucken, und ich verwende IPython, um die Funktion aufzurufen. Lassen ein Beispiel Funktion sein:Wie die gedruckten Anweisungen in IPython leeren

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

Das Ergebnis ist wie folgt:

0 1372337149.84 
1 1372337151.84 
2 1372337153.85 
3 1372337155.85 
4 1372337157.85 

I jede Reihe erwarten für 2 Sekunden zu bedruckenden, dann warten. Aber das Verhalten ist wie folgt. I beobachten zuerst:

0 1372337149.84 
1 

dann nach 2 Sekunden beobachten I den Zeitstempel 1 und die ID der nächsten Reihe, die 2 ist. Ich beobachte endlich den letzten Zeitstempel. Ich konnte nicht herausfinden, warum es sich so verhält statt einer Reihe nach der anderen. Irgendwelche Gedanken? Benötige ich eine spezielle Flush-Funktion, um zu drucken, was noch gedruckt werden soll?

+0

Es normalerweise für mich funktioniert. – Doorknob

+0

Mit CPython verhält es sich wie erwartet. Für Linux und Windows. – Elazar

+0

Ich benutze Canopy 1.0.1. Es hat Python 2.7.3 64 Bit drin. – petrichor

Antwort

11

Ich habe IPython nie verwendet, aber es sollte ausreichen, stdout nach jeder print Anweisung zu leeren.

So etwas wie dies funktionieren sollte ...

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

Aber 'print' fügt die neue Zeile automatisch hinzu, also sollte sie trotzdem geleert worden sein. – Elazar

+1

@Elazar In CPython vielleicht. Vielleicht verhält sich IPython anders. – Aya

+0

Es funktioniert jetzt, vielen Dank. – petrichor