#!/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”的进度,但它不起作用。任何想法如何达到我的目标?
答案 0 :(得分:5)
您的Python脚本正在生成一个最终由浏览器读取的HTML文件。如果在浏览器中单击“查看源代码”,则应该看到在控制台中运行Python脚本时会看到的相同内容。
这应该清楚为什么一个print语句不会“覆盖”另一个。就浏览器而言,它正在读取静态内容,就像您只是将HTML文件放在Web服务器上一样。唯一的区别是使用Python可以生成那个你想要的HTML文件。
要创建在浏览器中显示为动态的进度条,您需要使用客户端脚本(Javascript)。
如果要表明进度的进程是服务器端(Python),那么基本方法可能是这样的:
{"finished": false, "progress": 54.9, "target": 100.0}
如果实际知道(或者可以猜测,而不是完全担心反映现实的指标)操作将花费一定的时间,您可以简单地跳过很多使Javascript进度指示符取决于时间而不是正在进行的操作的实际状态。