我要做的是在我创建的脚本底部有一些'进度文本'。如果我循环列表[1,2,3,4,5]并打印i,那么它只是在不同的行上打印1,2,3,4和5。如果我想打印1到屏幕,睡5秒,清除然后再打印2?
我尝试过使用stdout.write(“text”),sleep,flush,stdout.write(“aetlkjetjer”),sleep,它只是简单地添加到“text”语句而不是刷新输出。
我是否误解了stdout.flush的工作方式?是不是应该刷新/擦除先前打印的输出?
答案 0 :(得分:3)
在计算机科学中,术语“刷新”并不意味着要删除缓冲区中已有的内容;相反,它意味着将缓冲区的未写入的内容(如stdout缓冲区)中的内容写入屏幕,在这种情况下将其写入屏幕。因此,当你告诉程序“刷新stdout”时,你真的只是告诉它“在stdout中取出什么,并确保它们全部显示在屏幕上。”
答案 1 :(得分:3)
所有.flush()
都会刷新缓冲区。您真正想要的是将退格(\b
)写入stdout
。
import time, sys
for i in [1,2,3,4,5]:
sys.stdout.write(str(i))
sys.stdout.flush() #flush the buffer because python buffers stdout
time.sleep(5)
sys.stdout.write("\b") #literally "write backspace".
sys.stdout.flush()
如果你想要计算超过一位数的数字,会变得更复杂。