首页 > 解决方案 > 动态打印时,如何删除整行?

问题描述

在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

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

标签: pythonprintingformatting

解决方案


对此的一般解决方案非常复杂,并且可能涉及使用curses或一些类似的模块来抽象出大部分系统依赖项。

在您的情况下,最简单的解决方案可能是填充数字(使用...:6d格式模板中的类似内容),使其始终具有相同的长度。或者,您可以在行尾放置适当数量的空格,以便在它变短时消除后面的任何内容。如果线路太长以至于被包裹,这两种解决方案都会导致问题。


推荐阅读