2016-05-21 15 views
0

Ich benutze die Enthought Canopy-IDE, um Python zu schreiben und die Ausgabe von print Befehle erreichen das ipython-Ausgabefenster nicht zu der Zeit, als ich sie erwarten würde. Der klarste Weg zu erklären, ist ein Beispiel zu geben:Verzögerung/Diskrepanz zwischen erwarteter und tatsächlicher Ausgabe an iPython-Ausgabe

import time 

print 1 
print 2 
time.sleep(1) 
print 3 

for i in range(10): 
    print i 
    time.sleep(0.5) 

Die anfänglichen 1, 23 und gleichzeitig nach einer Sekunde angezeigt werden, und dann gibt es eine halbe Sekunde Verzögerung, bevor die nächsten 0 angezeigt wird.

(im Gegensatz zu der erwarteten Momentan und gleichzeitige Anzeige von 1 und 2, dann eine Verzögerung von 1 Sekunde, bevor eine gleichzeitige Anzeige von 3 und 0, dann halbe Sekunde Verzögerung)

Dies verursacht mir Probleme, wie ich bin Ich suche nach Auslesungen von Variablen, bevor ein zeitraubender Teil des Skripts ausgeführt wird, und ich kann es nicht dazu bringen, diese Auslesungen anzuzeigen, ohne das Programm nach dem Aufruf des Befehls print zu beenden.

Irgendwelche Ideen/Lösungen?

Ich bin auf Windows 7, lassen Sie mich wissen, wenn Sie andere Spezifikationen/config Details benötigen ...

Dank!

Antwort

2

Sie können den Python-Interpreter mit einem zusätzlichen -u-Parameter starten, der Ihnen ungepufferte Ausgabe (d. H. Sofort) zur Verfügung stellt. Oder Sie können sys.stdout.flush() nach jeder print anrufen. Vielleicht Einwickeln es auch in einer Funktion wie folgt aus:

from __future__ import print_function 
import sys 

def print_flush(*args): 
    print(*args) 
    sys.stdout.flush() 
+1

Ja, die einfachste einfach zu nennen, ist 'sys.stdout.flush()', wenn Sie alles sehen wollen, die gedruckt worden ist. Dies kann in jedem Programm ein Problem sein, aber noch mehr, wenn der Kernel (wo der Druckbefehl ausgeführt wird) sich in einem anderen Prozess befindet als im Frontend (wo die Ausgabe angezeigt wird). –