Python print - 如何在 print end="\r" 之前清除输出
Posted
技术标签:
【中文标题】Python print - 如何在 print end="\\r" 之前清除输出【英文标题】: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=True
与print
和sys.stdout.flush()
一起使用,但没有成功。
在 Jupyter Notebook 和 iPython 中测试。 知道如何以简单的方式优化它吗?
【问题讨论】:
好吧,我得到了想要的输出:1111
,然后在 2 秒后,2
2 秒后我只收到2
。 1111
没有出现。
我相信这种行为是依赖于平台的(甚至可能在同一平台上的不同终端之间有所不同)。一种通用的方法是用空格右填充较短的输出。
我在 Windows 上测试了这个。我从下面的答案中知道的是 - 输出适合 Mac。
【参考方案1】:
如果可行就试试这个
import time
print (":<5".format(1111), end="\r")
time.sleep(2)
print (":<5".format(2), end="\r")
【讨论】:
你可以用shutil.get_terminal_size().columns
替换5,根据***.com/questions/566746/…应该是跨平台的。
这是迄今为止最好的答案。将其标记为答案。【参考方案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 天,看看是否会有更简单的答案。非常感谢这个解决方案。以上是关于Python print - 如何在 print end="\r" 之前清除输出的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Python2 中将所有:print "string" 替换为: print("string"),对于 Python3? [复制]