标准和冲洗?这是附加而不是冲洗

时间:2015-07-01 21:41:21

标签: python

我要做的是在我创建的脚本底部有一些'进度文本'。如果我循环列表[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的工作方式?是不是应该刷新/擦除先前打印的输出?

2 个答案:

答案 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()

如果你想要计算超过一位数的数字,会变得更复杂。