进度条使用sys.stdout.write不更新

时间:2013-07-15 02:24:52

标签: python console progress

我使用上一个答案中的代码来构建进度条功能:https://stackoverflow.com/a/3173331/939628

在我更改了一些代码之前它工作正常......我已经简化了我的代码来重现这个问题。

基本上,我正在循环遍历许多项目,在我计算要完成的操作数量之前,将进度设置为0,并且在每次迭代之后我将进度更新为一个。我还调用了update_progress函数,它应该打印出进度%。

它应该更新进度的线,但它只显示你打电话给它的最后一次打印(也就是当它以100%完成时)

真正奇怪的是,在调用update_progress()之前,你调用“print”它会起作用(不是它应该如何,这是更新当前行)。甚至更奇怪的是,我通过从我写的另一个类中移除对一系列函数的函数调用来发现错误....所以某种程度上该函数“启用”了这个打印...即使是“修复”的代码for循环中的问题启用了初始0%打印...

知道为什么打印不起作用?

import time
import itertools
import sys

def go():
    items = range(0,10)

    prog = 0.0 #Real so division works
    total = len(items)

    update_progress(0) # Even this intial call doesn't work

    for i in items:
        time.sleep(0.2)
        prog = prog + 1
        # adding print here makes it print the output from below to a new line
        update_progress(int(prog / total * 100))

def update_progress(progress):
    sys.stdout.write('\r[{0}] {1}%'.format('#' * (progress / 10), progress))

1 个答案:

答案 0 :(得分:2)

sys.stdout已缓冲,因此无法保证立即显示文本。您应该在写完字符串后刷新缓冲区:

sys.stdout.flush()