jquery - 使用 django 将实时控制台数据从服务器发送回客户端

标签 jquery python django

我有一个 django 应用程序在服务器上运行,我通过 python 运行可执行文件。 我想实时发送该可执行文件的输出,就像我不希望可执行文件首先完成并在一个 http 响应中发送整个数据一样,而是我想分多个部分发送输出,以便客户端知道发生了什么服务器端。

我不知道从哪里开始,也不知道如何继续完成这项工作。任何帮助将不胜感激。

现在我正在做一些非常简单的事情,如下所示:

popen=subprocess.Popen(list,stdout=subprocess.PIPE, stderr=subprocess.PIPE)
output,errdata=popen.communicate() #this waits for the executable to finish
return output,errdata

编辑1: 现在我创建了一个网站,用户可以在其中选择多个图像,然后我将其作为 XML HTTP Post 请求发送。可执行文件使用这些图像来做一些事情,然后返回响应。该服务器是一个运行带有 mod_wsgi 的 Django 的 Apache 服务器。

在 aychedee 在他自己的回答中发表的评论之一中,他建议通过使用 SockJS 或 SocketIO 与 Django 来模拟 websockets。

我不确定这是如何运作的。我是否能够通过 HTTP Post 请求上传图像,然后使用 SockJS 与 Django 进行通信。 提前致谢。

最佳答案

对于具有足够工作进程的低流量站点,您可以使用 StreamingHttpResponse provided in Django 1.5

你必须为它提供一个发电机。

import os
import subprocess
PIPE = subprocess.PIPE

def content_generator(command):
    subprocess.Popen(command, stdout=PIPE, stderr=PIPE)
    content = None
    while content != '':
        content = os.read(process.stdout.fileno(), 1024)
        yield content

在 View 中你会做类似的事情:

from django.http import StreamingHttpResponse

def my_streaming_view(request):
    return StreamingHttpResponse(
         content_generator(['cat', '/tmp/some_large_file.txt'])
    )

当然,这可能仍然在网络或浏览器级别的其他地方进行缓冲。因此,在尝试时请确保发送大量数据。至少一兆字节的文本。因此,您可能需要考虑使用像 WebSockets 这样的协议(protocol),可以立即接收数据。

关于jquery - 使用 django 将实时控制台数据从服务器发送回客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17048402/

相关文章:

javascript - 使用selenium API在页面超时后执行python中的函数

python - 如何将传说保留在情节中?

python - 使用 re.split 拆分字符串时的额外空元素

django - 迁移时表 "auth_user"中不存在错误 key (user_id)=(1)

mysql - Django 中是否有检查数据库完整性的工具?

django - 我需要在南迁移之前或之后调用syncdb吗

javascript - 当 url 包含 anchor 时,在页面加载时获取网页滚动条的垂直位置

javascript - Bootstrap 表单验证或必需在 Ajax 提交时不起作用

javascript - 当输入的值更改时,不会触发 Onchange 事件

javascript - jQuery toggleClass with single select on - 左键单击和右键单击