如何用 Python 编写下载进度指示器?

新手上路,请多包涵

我正在编写一个小应用程序来通过 http 下载文件(例如, 在此处 描述)。

我还想包括一个小的下载进度指示器,显示下载进度的百分比。

这是我想出的:

    sys.stdout.write(rem_file + "...")
    urllib.urlretrieve (rem_file, loc_file, reporthook=dlProgress)

    def dlProgress(count, blockSize, totalSize):
      百分比 = int(计数*blockSize*100/totalSize)
      sys.stdout.write("%2d%%" % 百分比)
      sys.stdout.write("\b\b\b")
      系统.stdout.flush()

输出:我的文件名… 9%

还有其他想法或建议吗?

有点烦人的是终端中百分比第一位数字上闪烁的光标。有没有办法防止这种情况?有没有办法隐藏光标?

编辑:

这里有一个更好的选择,使用全局变量作为 dlProgress 中的文件名和 ‘\r’ 代码:

    global rem_file # 在 dlProgress 中使用的全局变量

    urllib.urlretrieve (rem_file, loc_file, reporthook=dlProgress)

    def dlProgress(count, blockSize, totalSize):
      百分比 = int(计数*blockSize*100/totalSize)
      sys.stdout.write("\r" + rem_file + "...%d%%" % 百分比)
      系统.stdout.flush()

输出:我的文件名…9%

光标出现在行尾。好多了。

原文由 cschol 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 421
2 个回答

http://pypi.python.org/pypi/progressbar/2.2 有一个用于 python 的文本进度条库,您可能会发现它很有用:

这个库提供了一个文本模式的进度条。这通常用于显示长时间运行的操作的进度,提供正在进行处理的视觉线索。

ProgressBar 类管理进度,行的格式由许多小部件给出。小部件是一个对象,可以根据进度状态显示不同。小部件分为三种类型: - 字符串,始终显示自身; - ProgressBarWidget,每次调用它的更新方法时都可能返回不同的值;和 - ProgressBarWidgetHFill,类似于 ProgressBarWidget,只是它会扩展以填充行的剩余宽度。

progressbar 模块非常易于使用,但功能非常强大。并在可用时自动支持自动调整大小等功能。

原文由 readonly 发布,翻译遵循 CC BY-SA 4.0 许可协议

您也可以尝试:

 sys.stdout.write("\r%2d%%" % percent)
sys.stdout.flush()

在字符串的开头使用一个回车符而不是多个退格符。你的光标仍然会闪烁,但它会在百分号之后而不是在第一个数字下闪烁,并且使用一个控制字符而不是三个你可能会减少闪烁。

原文由 Commodore Jaeger 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题