使用flask和javascript的动态EventSource
我目前正在使用flask构建一个工具,该工具使用ssh执行各种操作。其中一个操作是使用DD从X复制到Y 我目前在我的页面上设置了以下javascript使用flask和javascript的动态EventSource,javascript,python,flask,jinja2,Javascript,Python,Flask,Jinja2,我目前正在使用flask构建一个工具,该工具使用ssh执行各种操作。其中一个操作是使用DD从X复制到Y 我目前在我的页面上设置了以下javascript <script> var source == new EventSource("/dd"); source.onmessage = function(event){ $('.determinate'.css('width', event.data+'%') if(eve
<script>
var source == new EventSource("/dd");
source.onmessage = function(event){
$('.determinate'.css('width', event.data+'%')
if(event.data == 100){
source.close()
}
}
上面是伪代码,但我希望能够更改的是DD命令(DD if=/dev/sda of=/test/img),该命令来自触发此页面的表单中的变量,以及ssh.connect函数和request.remote\u addr中的主机名
当我尝试用request.remote\u addr替换“127.0.0.1”时,我得到一个上下文错误
是否还有其他方法可以将flask/jinja2变量(如{image.path}})传递给我的生成器视图?。我想要的伪代码是这样的,其中主机名和dd是动态的(更改在花括号中)
只是想出来了,没有读文件的最后一段 如果您想在生成器中保留上一个请求的上下文,只需更改
return Response(generate(), mimetype='text/event-stream')
到
对于传递数据,我只是使用“session”对象来传递数据,然后在我使用完后将其删除
@app.route('/dd')
def progress():
def generate():
ssh.SSHClient({{ request.remote_addr }}, username, password)
chan = ssh.get_transport().open_session()
chan.settimeout(10800)
try:
ssh.do('dd if={{ device }} of={{ image.path }}')
while data:
data = chan.recv_stderr(1024)
try:
yield "data: " + str(data) + "\n\n\"
return Response(generate(), mimetype='text/event-stream')
return Response(generate(), mimetype='text/event-stream')
return Response(stream_with_context(generatE()), mimetype='text/event-stream')