为什么time.sleep()是一次全部发生,而不是一次一个?

问题描述 投票:0回答:1

我试图做一个小的动画类型的东西,它打印R,然后等待0.5秒的O,然后等待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秒,然后打印出整个单词。有什么建议吗?

python python-3.x time python-3.6 sleep
1个回答
2
投票

你的程序的输出是有行缓冲的(在任何常见的情况下都是如此),因此,由于你没有打印任何换行(\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().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)
    # ...
© www.soinside.com 2019 - 2024. All rights reserved.