使Python进度条适合所有命令提示符窗口大小



如何在所有命令提示符窗口大小的同一行上使进度条大小相同,而不分裂成一半或甚至多次调整cmd窗口大小时?

def progress bar(stream, chunk, bytes remaining):

percent = 100 * (float (bytes remaining) / stream file size)
bar = '█' * int(percent) + '-' * int((100 - percent))
print(f"r Downloading:  |{bar}|{percent:.2f}%", end="r")
  1. 确定终端宽度
    您可以使用os.get_terminal_size()来完成
width = os.get_terminal_size().columns
  1. 确定文本的剩余部分的大小
  2. 使用百分比作为比率来计算要使用多少条字符(█)和填充字符(-)来填充剩余部分。
remainder = width - len_text
bar_chars = int(percent/100) * remainder
fill_chars = remainder - bar_chars
bar = '█' * bar_chars + '-' * fill_chars

如果你对它关闭窗口调整大小,直到它被重新绘制,那么你就完成了。如果你想让它立即重绘,你需要为signal. sigwinch添加一个信号处理程序。

话虽如此,你可以使用像enlightenment这样的库,它已经处理了所有这些,并包括其他功能,如颜色和多个进度条。

import enlighten
manager = enlighten.get_manager()
pbar = manager.counter(total=file_size, desc='Downloading', unit='bytes')
# This part will vary based on your implementation, but here is an example
while len(data) < file_size:
chunk = get_next_chunk()
data += chunk
pbar.update(len(chunk))

在repo中有一个ftp下载的例子。

最新更新