Wie dauerhaft anzuzeigen python Ausgabe auf einer Webseite?
Ich möchte in der Lage sein, eine Webseite zu besuchen, und es wird führen Sie eine python-Funktion und zeigt den Fortschritt in der Webseite.
So, wenn Sie besuchen Sie die Webseite sehen Sie die Ausgabe des Skripts als wenn Sie hatte es von der Befehl Linie und sehen Sie die Ausgabe in der Kommandozeile.
Was muss ich tun, in die Funktion?
Was muss ich tun in der Vorlage?
EDIT:
Ich versuche, mit Markus Unterwaditzer code mit einer Vorlage.
{% extends "base.html" %}
{% block content %}
{% autoescape false %}
{{word}}
{% endautoescape %}
{% endblock %}
Python-code
import flask
from flask import render_template
import subprocess
import time
app = flask.Flask(__name__)
@app.route('/yield')
def index():
def inner():
for x in range(1000):
yield '%s<br/>\n' % x
time.sleep(1)
return render_template('simple.html', word=inner())
#return flask.Response(inner(), mimetype='text/html') # text/html is required for most browsers to show the partial page immediately
app.run(debug=True, port=8080)
Und es läuft aber ich sehe nichts im browser.
- Das problem ist in Ihrem Teilprozess.Popen Sie vorbei sind das falsche argument nichts, da der Befehl. Versuchen Sie, um das Spiel mit Popen in der interaktiven shell und Lesen Sie die Dokumente, bekommen ein Gefühl, wie Popen funktioniert.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist eine sehr einfache app, die Ströme ein-Prozess " - Ausgabe mit normale HTTP:
Ich hatte das gleiche problem heute, und einen Weg gefunden, um anzupassen Markus Unterwaditzer Antwort mit einer Vorlage arbeiten.
Der Schlüssel ist die Verwendung von jinja ist
Vorlage.generate()
stattTemplate.render()
zu, die von flask ' srender_template()
.Unter der Annahme, dass es eine Vorlage
result.html
sieht wie folgt aus:Ich würde denken, der einfachste Weg, dies zu tun ist, um erstellen Sie Ihre Seite, und dann AJAX verwenden, um periodische Anfragen an den server, und aktualisieren Sie die Inhalte auf Ihrer Seite mit den Ergebnissen. Möglicherweise gehören die Umsetzung long polling, dies zu tun.
Irgendeiner Weise Sie dies tun, werden Sie brauchen, um irgendwie machen Sie Ihre Funktion nicht blockiert, so dass Sie immer noch dienen, die Anforderungen, während es arbeitet. Man könnte manuell eine Funktion schreiben, in dem Ihnen ein Antrag, wenn es ist ein warten und sonst weiter läuft in den nächsten "Brocken" der Funktion. Das würde bedeuten, zerlegen Sie die Funktion in kleine Teile, so können Sie Versand Sie Sie bei Bedarf.
Ein besserer Ansatz ist die Verwendung von threading-oder multiprocessing, je nachdem, ob Ihre Funktion gebunden ist, die von IO oder CPU-Auslastung.
Haben Sie verwenden möchten, um WebSocket? wenn dem so ist, können Sie sich beziehen:Websocket mit Kolben und Gevent
Können Sie mit meta-refresh in einem der Vorlage
meta http-equiv="refresh" content="5"