在 django 模板中实时显示控制台输出[关闭]

Posted

技术标签:

【中文标题】在 django 模板中实时显示控制台输出[关闭]【英文标题】:Display console output in django template in real time [closed] 【发布时间】:2019-03-12 09:20:37 【问题描述】:

我是 websocket 的新手,所以我遇到了一些问题。我正在尝试创建一个基于 Web 的用户界面,用户将在其中按下按钮并在后台启动脚本,用户被重定向到 display_console_output,其中将显示数据。我想在浏览器中实时显示控制台输出。当脚本完成她的工作时,我能够显示输出,如果脚本正在工作,我不知道如何显示数据。这是我的代码

views.py:

def display_console_output(request):
    if request.method == 'GET':
        process = subprocess.Popen('ping -t 8.8.8.8', shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
        output = process.communicate()[0]
        return render(request, 'update_file/display_console_output.html', 'page_title': 'Console Output',
                                                                           'console_output': (output.decode('utf-8')),)

routing.py:

application = ProtocolTypeRouter(
    # Empty for now (http->django views is added by default)
    'websocket': AllowedHostsOriginValidator(
        AuthMiddlewareStack(
            URLRouter(
                [
                    url(r"^(?P<consoleOutput>[\w.@+-]+)/$", ConsoleDataConsumer),
                ]
            )
        )
    )
)

如果您能给我任何解决我问题的建议,我将不胜感激。

【问题讨论】:

请不要通过破坏您的帖子为他人增加工作量。通过在 Stack Overflow 上发帖,您已根据CC BY-SA 3.0 license 授予 SO 分发该内容的不可撤销的权利。根据 SO 政策,任何破坏行为都将被撤销。如果您想了解更多关于删除帖子的信息,请在How does deleting work?了解更多信息 【参考方案1】:

两种可能的方法是;

    当脚本运行时,您可以抓取它的输出并将其保存到数据库中,并且在模板中,您可以每隔一段时间(例如每秒)发送 AJAX 请求以获取更新的控制台输出并将其显示在模板中 设置一个websocket服务器(如果你使用django,你可以使用通道(https://github.com/django/channels)websockets),在你的模板中建立一个websocket连接,并将控制台输出实时推送到客户端。

【讨论】:

以上是关于在 django 模板中实时显示控制台输出[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

django 模板关闭特殊字符转化

在模板(Django)中实现归档日历时出现 IF 运算符错误

如何在 Django 模板中使用这个 for 循环? [关闭]

如何在 Django 模板中实现面包屑?

在 django 中控制查看和模板输出的请求

为啥 Django 不在我的模板上显示我的动态背景图像