Flask-流式传输内容保持上下文
Flask - Stream content keeping context
我正在使用以下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$
当我发布表单时,它会重定向到一个空白页面,在那里我可以看到流的输出,但我失去了所有的布局/css/html/etc。。。
如何在看到流输出的同时保持当前布局
理想情况下,我希望能够使用流输出(Jquery)动态更新当前页面中的<div>
元素(而不是重定向),但我不确定这是否可能。
根据@reptilicus的建议,我重写了代码以使用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)
var socket = io.connect('http://' + document.domain + ':' + location.port + '/stream')
socket.on('message', function(msg){
$('#streaming_text').append(msg);
})
...
jqxhr.done(function(cmd){ # This is executed after an AJAX post, but you can change this to whatever event you like
socket.send(cmd)
return false;
})
相关文章:
- 将函数的上下文应用于javascript变量
- Twitter Bootstrap typeahead:使用“this”获取上下文/调用元素
- 使用JQuery的动态上下文菜单
- 如何访问UIWebView'的子窗口上下文
- d3js文本传输-示例代码不起作用
- JQuery在单击正文时隐藏上下文菜单
- JQuery上下文菜单显示/隐藏问题
- 通过AJAX传输变量
- 如何从HTTP上下文对象中获取Post数据
- HTML字符串作为上下文
- 派生进程的stdout在管道传输时工作异常
- 为什么我的上下文选择器和.buttonset()在ie中花费了这么长时间
- 丢失对象“;这个“;方法中的上下文
- 使用Tabris-js,并尝试使用cordova文件和文件传输插件
- 防止在移动Safari(iPad/iPhone)中长按/长按默认上下文菜单
- d3防止在上下文菜单上触发mouseout
- 是否可以在不更改上下文的情况下调用函数.apply
- 使用Emscripten Worker API传输数据而不进行复制
- 调用$.each()函数时上下文发生变化
- Flask-流式传输内容保持上下文