2017-08-16 1 views
0

Ich habe ein Skript, das wie erwartet über die Befehlszeile funktioniert, aber wenn ich einen Browser durchführe, gibt es die Ausgabe erst, nachdem das ganze Skript beendet wurde. Ich bin brandneu bei Python und kann nicht herausfinden, wie man das Verhalten so verändert, dass es gedruckt wird, wenn es sollte. Beispiel ...Python-Skript wird nur nach Ausführung in den Browser ausgegeben

print("Show this") 
time.sleep(10) 
print("Then this") 
time.sleep(10) 
print("And then this") 

In einem Browser wartet es 20 Sekunden und zeigt dann die gesamte Ausgabe auf einmal an.

Dank

+6

können Sie genauer angeben, welche Werkzeuge Sie verwenden? Was meinst du mit "durch einen Browser"? – peyo

+0

Sicher, wenn ich über einen Browser auf das Skript zugreife, indem ich es auf http://example.com/cgi-bin/script.py zeige, wartet es 20 Sekunden, bevor es irgendeine Ausgabe gibt – ShaunG

Antwort

0

Python Puffer stdout. Was Sie wahrscheinlich tun müssen, ist flush es.

from sys import stdout 

print("Show this") 
stdout.flush() 
time.sleep(10) 
print("Then this") 
stdout.flush() 
time.sleep(10) 
print("And then this") 
stdout.flush() 
+1

Sogar dann kann es zusätzlich vom Webserver gepuffert werden wenn als CGI ausgeführt. Zum Teil, weil der Webserver eine komplett andere Fehlermeldung senden kann, wenn das Programm einen Fehlercode zurückgibt. –

+0

Das hat den Trick gemacht, vielen Dank! – ShaunG

0

Eigentlich ist es normal.

Während Sie das Skript auf Ihrem Computer ausführen (z. B. über die Konsole), wird die Ausgabe an die Standardausgabe (a.k.a. stdout) gesendet und Ihre Shell liest direkt auf stdout.

Wenn Sie ein Skript von einem Webserver ausführen, erwartet Ihr Browser eine Datei.
In beiden Fällen, wenn Ihr Webserver Ihnen die Daten so schnell wie er berechnet sendet (so erhalten Sie in Ihrem Fall nur den ersten Druck) oder wählen Sie die Ausgabe so lange "puffern" wie das Skript hat nicht beendet, um Ihnen das gesamte Ergebnis (die Ausgabe des Programms) als eine einzige Datei senden zu können.

Mit anderen Worten, Ihr Webserver wartet auf Ihr Programm, um Ihnen die Ausgabe Ihres Programms zu senden.
Wie Ihr Programm 2 time.sleep(10) hat, wartet es 20 Sekunden insgesamt + die Zeit der Ausführung (fast vernachlässigbar) der print() Anrufe.

Ihre Frage ist nicht pythonabhängig, sondern eher webbezogen.

Verwandte Themen