【问题标题】:How do I display real-time python script output on a website?如何在网站上显示实时 python 脚本输出?
【发布时间】:2010-12-09 22:28:21
【问题描述】:

我有一个 Python 脚本,它每隔一两秒输出一次,但需要很长时间才能完全完成。我想建立一个网站,以便有人可以直接调用脚本,并在脚本运行时将输出发送到屏幕。

我不希望用户等到脚本完全完成,因为这样会立即显示所有输出。我也试过了,连接总是超时。

我不知道这个过程叫什么,我在寻找什么术语,以及我需要使用什么。电脑动画?阿贾克斯?在这里需要一些认真的指导,谢谢!

如果重要的话,我打算使用 Nginx 作为网络服务器。

【问题讨论】:

    标签: python ajax cgi web-applications fastcgi


    【解决方案1】:

    首先 - 你的脚本必须输出标题:

    连接:保持活动状态

    因为浏览器必须知道它必须等待。

    而且您的脚本必须在没有缓冲的情况下输出数据。而stackoverflow有already answered this question

    【讨论】:

      【解决方案2】:

      解决方案是在脚本执行的选定点刷新输出缓冲区 - 我只在 PHP 中通过 flush() 完成过此操作,但这看起来像 the Python equivalent:

      cgiprint() 也会刷新输出 使用 sys.stdout.flush() 缓冲。最多 服务器缓冲脚本的输出 直到完成。长时间运行 脚本,8个缓冲输出可能 让你的用户感到沮丧,谁会想知道 发生了什么。你可以 定期刷新缓冲区,或运行 无缓冲模式下的 Python。这 执行此操作的命令行选项是 -u, 您可以指定为 #!/usr/bin/python -u 在你的 shebang 线上。

      【讨论】:

        【解决方案3】:

        nginx 不支持 CGI,所以你需要使用 fastcgi 或 wsgi

        或者,您可以使用 webpy 之类的东西并通过 nginx 代理它

        【讨论】:

          【解决方案4】:

          来自http://tools.cherrypy.org/wiki/Comet “维基百科将 Comet 描述为“一种新词,用于描述一种 Web 应用程序模型,在该模型中,长期持有的 HTTP 请求允许 Web 服务器将数据推送到浏览器,而无需浏览器明确请求它。”换句话说,Comet 就是您需要构建真正精美的 AJAX 应用程序的异步 Javascript mojo。

          以下代码演示了如何使用 CherryPy 和 jQuery 编写 Comet 应用程序。它是控制台 ping 命令的 Web 界面。这个例子选择了 ping 命令,因为如果不给定参数,它将无限期地运行。在 Web 应用程序编程方面,执行永无止境的命令通常是一个很大的禁忌,但使用 CherryPy,我们可以很容易地处理这个问题:" SEE LINK

          我正在尝试做同样的事情。到目前为止,我使用的是cherrypy,因为它很容易与我的脚本集成。

          【讨论】:

            【解决方案5】:

            正如其他一些人所建议的,您可以使用保持活动连接,而不是“return”语句使用 yield 语句,而不是“print”语句也使用 yield 语句。这基本上会将 python 脚本中发生的所有内容显示到网站页面上。

            经过广泛的搜索和测试,我建议 nginx 作为反向代理,以 gevent 和 bottle 作为后端,因为 nginx 永远不会提供 python 源文件。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2021-03-24
              • 2017-06-15
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多