【问题标题】:Python print - how to clear output before print end="\r"Python print - 如何在 print end="\r" 之前清除输出
【发布时间】:2020-07-28 03:10:49
【问题描述】:

通常print ("{}".foo, end="\r") 效果很好。

但例外情况是foo 很长,而下次foo 变短。输出不正确。下面是一个例子:

import time
print ("{}".format(1111), end="\r")
time.sleep(2)
print ("{}".format(2), end="\r")

第一个输出:

1111

最终输出(2 秒后)- 错误

2111

预期输出

2

尝试

尝试将flush=Trueprintsys.stdout.flush() 一起使用,但没有成功。

在 Jupyter Notebook 和 iPython 中测试。 知道如何以简单的方式优化它吗?

【问题讨论】:

  • 好吧,我得到了想要的输出:1111,然后在 2 秒后,2
  • 2 秒后我只收到21111 没有出现。
  • 我相信这种行为是依赖于平台的(甚至可能在同一平台上的不同终端之间有所不同)。一种通用的方法是用空格右填充较短的输出。
  • 我在 Windows 上测试了这个。我从下面的答案中知道的是 - 输出适合 Mac。

标签: python output


【解决方案1】:

如果可行就试试这个

import time
print ("{:<5}".format(1111), end="\r")
time.sleep(2)
print ("{:<5}".format(2), end="\r")

【讨论】:

【解决方案2】:

您可以使用类实例来记住最后打印的内容并用空格覆盖它:

import time

class OverwriteLast:
    def __init__(self):
        self.last = 0
    def print(self,s):
        if self.last:
            print(' '*self.last, end='\r')
        self.last = len(s)
        print(s, end='\r')

over = OverwriteLast()

over.print("{}".format(1111))
time.sleep(2)
over.print ("{}".format(2))

按要求输出

【讨论】:

  • 正确的方法,它的工作原理。我将再等 1 天,看看是否会有更简单的答案。非常感谢这个解决方案。
猜你喜欢
  • 1970-01-01
  • 2021-04-08
  • 2021-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-05
  • 2019-10-05
  • 2022-06-13
相关资源
最近更新 更多