【问题标题】:Problems with sys.stdout.write() with time.sleep() in a functionsys.stdout.write() 和 time.sleep() 在函数中的问题
【发布时间】:2010-05-11 07:38:51
【问题描述】:

我想要的是使用 time.sleep() 打印出每秒打印一个点的 5 个点,但结果是在 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.'

【问题讨论】:

    标签: python buffering


    【解决方案1】:

    写完后需要flush。

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

    【讨论】:

      【解决方案2】:

      您应该使用sys.stderr.write 作为进度条; stderr 具有不被缓冲的(绝非巧合)优势,因此不需要sys.stderr.flush 调用。

      另请参阅this 答案。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-06
        • 2011-03-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多