0

下面的这个变量将处理存储在变量名proc中:

proc = subprocess.Popen(['sshpass', '-p', password, 'rsync', '-avz', '--info=progress2', source12, destination], 
                                    stderr=subprocess.PIPE, stdout=subprocess.PIPE).communicate()[0]

我是 Django 模板中的一个表单。每当用户按下按钮提交时,我都想使用变量 proc 并显示处理过程。我尝试在 Django 模板 Javascript 中使用变量 proc,如下所示:

function popUp() {
    var a = "{{proc}}"
    document.write(a)
}
</script>

但它只显示空白页面。我已经测试了直接在 html body 标记内调用的变量,它可以正常工作,但不适用于 javascript。我做错了什么?

我在 Django 模板中像这样调用popUp函数,如下所示:

<form name="form1" action="/sync/" method="post" onsubmit="popUp()">

而且,我在 Django 模板中传递变量proc ,如下所示:

return render_to_response('synced.html', {'final_result':final_list}, context_instance=RequestContext(request))
return render_to_response('thanks.html', {'proc':proc}, context_instance=RequestContext(request))

编辑: 为了检查,我没有将变量传递给thanks.html,而是将变量proc传递给synced.html并在模板中使用,如下所示:

<th>Files in the server:</th>
</tr>
<td>{{ proc }}</td>
<tr>

我的输出是:

receiving incremental file list 0 0% 0.00kB/s 0:00:00 (xfr#0, to-chk=0/1) sent 20 bytes received 56 bytes 6.08 bytes/sec total size is 8,640 speedup is 113.68
4

1 回答 1

0

我建议您所做的并没有错,但是已经设计了更好的方法和技术来解决您的这个用例。您可以尝试的一些事情 -

  1. AJAX 轮询 - 使用客户端计时器,您不断地轮询服务器关于它的状态。
  2. COMET——彗星是一种PUSH技术。由于 HTTP 是一种拉取技术,您可以在服务器和客户端之间建立持久连接,并让服务器向您推送进度。

不是您正在寻找的答案,但希望这会有所帮助......

于 2012-12-12T03:52:12.723 回答