Ich habe einen Flask Python Webserver mit Websockets (socketIO).Flask + SocketIO - Ausgabe des Stream-Befehls an HTML-Element
Ich möchte einen Befehl ausführen und die Ausgabe auf ein <p id='streaming_text'>
HTML-Element streamen.
Dies ist mein Code:
HTML
div class='streaming'>
<p id="streaming_text"></p>
</div>
JQuery
var socket = io.connect('http://' + document.domain + ':' + location.port + '/stream')
socket.on('message', function(msg){
$('#streaming_text').append(msg);
})
...
jqxhr.done(function(cmd){
socket.send(cmd)
return false;
})
Python
@socketio.on('message', namespace='/stream')
def stream(cmd):
# Streams output of a command
print("Received msg %s from JS socket" % cmd)
print("Executing %s" % cmd)
from shelljob import proc
g = proc.Group()
p = g.run(cmd)
while g.is_pending():
lines = g.readlines()
for proc, line in lines:
print(line)
send(line, namespace='/stream')
im Browser-Konsole sehe ich alle send(line)
zur gleichen Zeit ausgeführt werden: , wenn der Befehl beendet ausgeführt wird. Die print(line)
zeigt mir jedoch die Ausgabe meines Befehls in Echtzeit.
Die Befehle, die ich ausführe, dauern im Durchschnitt 15 Minuten. Daher wäre es eine schlechte Benutzererfahrung, so lange warten zu müssen, ohne eine Ausgabe zu sehen.
Wie kann ich diese Nachrichten sofort senden, ohne auf das Ende des Befehls warten zu müssen?