动态打印时,如何删除整行?

时间:2019-03-20 05:40:39

标签: python printing formatting

在python中,要动态打印,标准方法是使用回车符。

喜欢

sys.stdout.write(f"\r {some_str}")
sys.stdout.flush()

#or

print(f"{some_str}", end="\r", flush=True)

但是如果我的前一行比当前行长,它会持续存在。 例如,以下代码-

for i in range(100):  
   print(f"{10000*(99-i)} text", end='\r', flush=True)
   time.sleep(0.03)

最后显示以下内容

0 texttextt

代替

0 text

如何使程序在下一次输入之前完全擦除行?

1 个答案:

答案 0 :(得分:0)

对此的一般解决方案令人惊讶地复杂,并且可能涉及使用curses或一些类似的模块来抽象掉大多数系统依赖项。

在您的情况下,最简单的解决方案可能是填充数字(在格式模板中使用...:6d之类的数字),以使其始终具有相同的长度。或者,您可以在行的末尾放置适当数量的空格,以便在行尾变短时将其擦掉。如果行太长以致被包裹,这两种解决方案都会引起问题。