在Django模板中实时显示控制台输出

时间:2019-03-12 09:20:38

标签: javascript python django websocket

我是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),
                ]
            )
        )
    )
})

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

1 个答案:

答案 0 :(得分:1)

两种可能的方式是

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