为什么sys.stdout.flush()无法让所有打印字符显示在同一行?
问题原因
- 核心问题和
sys.stdout.flush()的功能无关,是Python的print()函数默认会在输出内容末尾追加换行符\n,你每次打印单个字符时,写入输出缓存的内容本身就自带换行,刷新缓存后自然是每个点单独占一行。 - 你当前
flush()的调用时机也不对:先执行刷新操作,再打印带换行的新内容,刷新操作没有作用到新打印的字符上。
修复方案
方案1:通过print参数调整(更简洁)
指定print()的end参数为空字符串,取消默认追加的换行,同时开启print自带的flush参数即可,不需要单独调用sys.stdout.flush():
import sys import time wait = "..." for char in wait: time.sleep(1) print(char, end='', flush=True) # 三个点全部输出后补充一次换行,避免后续终端输入/输出和这三个点拼接在同一行 print()
方案2:保留sys.stdout.flush()调用
如果需要保留手动控制缓存刷新的逻辑,可以用sys.stdout.write()写入内容,再执行刷新:
import sys import time wait = "..." for char in wait: time.sleep(1) sys.stdout.write(char) sys.stdout.flush() # 输出完成后补充换行 sys.stdout.write('\n')
内容的提问来源于stack exchange,提问作者jmwalker0498
相关产品推荐
相关产品推荐

