python - 为什么 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 秒,然后打印整个单词。有什么建议么?
解决方案
程序的输出是行缓冲的(在任何常见情况下都是如此),因此,由于您没有打印任何换行符 ( \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)
# ...
推荐阅读
- html - 图片不会填满 div
- ruby-on-rails - 如何在 ActiveAdmin 上为 biginteger 制作 *_cont 过滤器
- c - 使用 [] 运算符而不是使用 malloc 动态分配数组?
- javascript - 从对象数组中减去值
- javascript - 按住 keydown 问题时单击 Firefox 事件传播
- r - scale_size 和 scale_alpha_manual 基于组名
- flutter - 集成测试颤振包与许多其他包不兼容
- c# - 如何使用反射c#调用带有可选参数的方法
- c - main.exe 文件运行失败 vs 代码中的访问被拒绝错误
- yocto - Bitbake hello world 示例失败