0

我使用先前答案中的代码来构建进度条功能: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))
4

1 回答 1

2

sys.stdout被缓冲,因此不能保证立即显示文本。您应该在写入字符串后刷新缓冲区:

sys.stdout.flush()
于 2013-07-15T02:28:25.720 回答