首页 > 解决方案 > 为什么 time.sleep() 一次发生而不是一次发生?

问题描述

我正在尝试制作一个小动画类型的东西,它打印 R 然后等待 0.5 秒,然后等待 0.5 秒,依此类推直到结束。这是我写的代码:

import time
def rolling():
    print('R', end = '')
    time.sleep(.5)
    print('o', end = '')
    time.sleep(.5)
    print('l', end = '')
    time.sleep(.5)
    print('l', end = '')
    time.sleep(.5)
    print('i', end = '')
    time.sleep(.5)
    print('n', end = '')
    time.sleep(.5)
    print('g', end = '')
    time.sleep(.5)

当我运行它时,它会等待 3.5 秒,然后打印整个单词。有什么建议么?

标签: pythonpython-3.xtimepython-3.6sleep

解决方案


程序的输出是行缓冲的(在任何常见情况下都是如此),因此,由于您没有打印任何换行符 ( \n),因此结果只会在执行结束时一次性写入控制台。

为确保每次调用print()立即产生输出,您可以添加flush=True(感谢粉红色的 spikyhairman指出这一点,在编写原始答案时我不知道该功能):

import time

def rolling():
    print('R', end = '', flush=True)
    time.sleep(.5)
    print('o', end = '', flush=True)
    time.sleep(.5)

您甚至可以直接使用sys.stdout.write()and.flush()代替:

import time
import sys

def rolling():
    sys.stdout.write('R')
    sys.stdout.flush()
    time.sleep(.5)
    sys.stdout.write('R')
    sys.stdout.flush()
    time.sleep(.5)
    # ...

推荐阅读