在函数中使用time.sleep()时sys.stdout.write()的问题

5 投票
2 回答
4246 浏览
提问于 2025-04-15 22:34

我想要的是每秒打印一个点,总共打印5个点,使用的是time.sleep()这个方法。但是结果是5个点在5秒后一次性打印出来。
我试过用print和sys.stdout.write,结果都是一样的。

谢谢大家的建议。

import time
import sys

def wait_for(n):
    """Wait for {n} seconds. {n} should be an integer greater than 0."""
    if not isinstance(n, int):
        print 'n in wait_for(n) should be an integer.'
        return
    elif n < 1:
        print 'n in wait_for(n) should be greater than 0.'
        return
    for i in range(0, n):
        sys.stdout.write('.')
        time.sleep(1)
    sys.stdout.write('\n')

def main():
    wait_for(5)    # FIXME: doesn't work as expected

if __name__ == '__main__':
    try:
        main()
    except KeyboardInterrupt:
        print '\nAborted.'

2 个回答

4

你应该使用 sys.stderr.write 来显示进度条;因为标准错误输出(stderr)有一个很大的好处,就是它不会进行缓存,所以你不需要调用 sys.stderr.flush 来刷新输出。

另外,你可以看看 这个回答。

9

你在写完东西后需要清空缓存。

sys.stdout.write('foo')
sys.stdout.flush()
wastetime()
sys.stdout.write('bar')
sys.stdout.flush()

撰写回答