Javascript Flask-流内容保持上下文

Javascript Flask-流内容保持上下文,javascript,python,flask,Javascript,Python,Flask,我正在使用下面的Flask代码对命令的输出进行流式处理: @app.route('/', methods=['GET', 'POST']) def index(): if request.method == 'POST': ... # some logic to get cmd from POST request ... return redirect_to(url_to(stream, cmd=cmd)) retu

我正在使用下面的Flask代码对命令的输出进行流式处理:

@app.route('/', methods=['GET', 'POST'])
def index():
    if request.method == 'POST':
        ...
        # some logic to get cmd from POST request
        ...
        return redirect_to(url_to(stream, cmd=cmd))
    return render_template('index.html')

@app.route('/stream/<cmd>')
def stream(cmd):
    print("Executing %s" % cmd)
    g = proc.Group()
    p = g.run(cmd)
    def stream_cmd():
        while g.is_pending():
            lines = g.readlines()
            for proc, line in lines:
                print(line)
                yield line + '</br>'
    return Response(stream_cmd(), mimetype='text/html')  # text/html is required for most browsers to show th$
@app.route('/',方法=['GET','POST'])
def index():
如果request.method==“POST”:
...
#从POST请求获取cmd的一些逻辑
...
返回重定向到(url到(stream,cmd=cmd))
返回渲染模板('index.html')
@app.route(“/stream/”)
def流(cmd):
打印(“正在执行%s”%cmd)
g=过程组()
p=g.run(cmd)
def stream_cmd():
当g.挂起()时:
行=g.读行()
对于proc,行中的行:
打印(行)
屈服线+'
' 大多数浏览器都需要返回响应(stream_cmd(),mimetype='text/html')#text/html来显示$
当我发布我的表单时,它会重定向到一个空白页面,在那里我可以看到我的流的输出,但是我失去了所有的布局/css/html/etc

如何在仍能看到流式输出的情况下保持当前布局?


理想情况下,我希望能够使用流输出(Jquery)动态地更新当前页面中的
元素(而不是重定向),但我不确定这是否可行。

根据@爬行动物推荐,我重写了代码以使用WebSocket

以下是工作代码:

Python

@socketio.on('message', namespace='/stream')
def stream(cmd):
    # Streams output of a command
    from shelljob import proc
    g = proc.Group()
    p = g.run(cmd)
    while g.is_pending():
        lines = g.readlines()
        for proc, line in lines:
            send(line, namespace='/stream')
            eventlet.sleep(0) # THIS IS MANDATORY
接收
send
调用发送的消息的相应JavaScript如下所示:

JavaScript(JQuery)


按照@爬行动物推荐,我重写了代码以使用WebSocket

以下是工作代码:

Python

@socketio.on('message', namespace='/stream')
def stream(cmd):
    # Streams output of a command
    from shelljob import proc
    g = proc.Group()
    p = g.run(cmd)
    while g.is_pending():
        lines = g.readlines()
        for proc, line in lines:
            send(line, namespace='/stream')
            eventlet.sleep(0) # THIS IS MANDATORY
接收
send
调用发送的消息的相应JavaScript如下所示:

JavaScript(JQuery)


但老实说,这最好是通过服务器发送的事件/websocket来完成的。您能提供一些代码来使用websocket来完成吗?我在任何地方都能看到,但我从来没有让它工作过,但老实说,这最好用服务器发送的事件/websocket来完成。您能提供一些代码用websocket来完成吗?我到处都能看到,但我从来没有让它工作过