【问题标题】:Progress Bar via Python CGI通过 Python CGI 的进度条
【发布时间】:2013-09-09 12:56:53
【问题描述】:
#!/usr/bin/env python

import time
import sys
import os
for i in range(10):
    progress_bar = \
        """
        <!DOCTYPE html>
        <html>
        <body>
        <p>Display a gauge:</p>
        <meter value="%s" min="0" max="10">2 out of 10</meter><br>
        </body>
        </html>
        """%(i)

    print  progress_bar
    sys.stdout.flush() # do this after the print
    time.sleep(1.0)

我在这里尝试创建一个进度条,其中“i”是进度指示器。 。屏幕截图如下。我所期望的是,通过使用 sys.stdout.flush() 可以消除以前的 HTML 打印,只保留“i”的当前进度,但它不起作用。任何想法如何实现我的目标?

【问题讨论】:

  • 这些事情是通过javascript完成的。​​

标签: python html progress-bar cgi


【解决方案1】:

您的 Python 脚本正在生成一个最终由浏览器读取的 HTML 文件。如果您在浏览器中单击“查看源代码”,您应该会看到与在控制台中运行 Python 脚本时看到的相同的内容。

这应该清楚为什么一个打印语句不会“覆盖”另一个。就浏览器而言,它正在读取静态内容,就像您只是将 HTML 文件放在 Web 服务器上一样。唯一的区别是,使用 Python,您可以随心所欲地生成 HTML 文件。

要使进度条在浏览器中显示为动态,您需要使用客户端脚本 (Javascript)。

如果您要指示进度的进程是服务器端 (Python),则基本方法可能如下所示:

  • 制作一个 Python 脚本,提供一些信息(以 JSON、纯文本或任何其他对您方便的形式)来指示操作的进度,例如:像 {"finished": false, "progress": 54.9, "target": 100.0} 这样的 JSON 文档
  • 制作一个 Javascript 函数,根据数字设置进度条的视觉状态。
  • 创建一个 Javascript 函数,该函数对 Python 端进度服务脚本的 URL 执行请求并解析返回的信息。
  • 将这些部分连接在一起。在操作进行期间,定期轮询服务器以了解其进度并相应地设置进度条。

如果您确实知道(或可以猜测,完全不用担心反映现实的指标)操作将花费固定的时间,您可以通过简单地跳过很多使 Javascript 进度指示器依赖于时间,而不是依赖于正在进行的操作的实际状态。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-30
    • 2021-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多