sys.stdout.write和sys.stdout.flush将字符留在后面

时间:2018-09-29 07:25:02

标签: python

我正在尝试创建一个计数器,该计数器以每秒100,000的增量从1,000,000滴答到0,并将其显示在一行上,每秒更新一次。

但是,下面的代码在末尾打印了一个额外的零:

counter = 1000000

while counter > 0:
    sys.stdout.write("%s\r" % counter)
    sys.stdout.flush()
    counter -= 100000
    time.sleep(1)

我得到了输出(每个输出都写在上一行):

1000000
9000000
8000000
7000000
6000000
...

脚本在末尾正确停止。当我将\r替换为\n时,它可以正确打印数字,但是显然我希望它刷新而不是每次都创建新行。

1 个答案:

答案 0 :(得分:2)

第一行末尾是一个字符,作为一种解决方法,您可以手动覆盖它:

while counter > 0:
    sys.stdout.write(str(counter).ljust(7) + "\r")
    counter -= 100000
    time.sleep(1)