我在Window的命令提示符窗口中使用Python 2.7(这很重要,因为这意味着我无法处理VT100转义序列)。
要删除控制台中的上一行,我可以使用sys.stdout.write('\r'+white_spaces_covering_the_entire_text
。
但是如果我想删除最后的 n 打印而不是仅删除最后一次打印呢?
让我们举个例子:
import sys
import time
print(" Some text goes here\n")
print(" Some other text goes here\n")
print(" Calculating something. Please wait until it is done.")
for x in range(10):
time.sleep(0.5)
sys.stdout.write('\r'+" "*20)
sys.stdout.write('\r'+" Loading"+"."*x)
sys.stdout.write('\r'+" "*20)
print(" We have concluded that blah blah blah")
正如你所看到的,有一部分是"正在加载"打印被覆盖为" animate"这条线。
经过漫长的等待(5秒)后,程序结束,命令窗口如下所示:
Some text goes here
Some other text goes here
Calculating something. Please wait until it is done.
We have concluded that blah blah blah
这里的想法是我想删除"计算某事。请等到它完成。"行(不仅是最后一个"正在加载.........."打印)。这意味着删除最后两行。我该怎么办?
我发现了一个非常难看(但有效)的方法来解决这个问题。这段代码可以满足我的需求:
import sys
import time
import os
def cls():
os.system('cls' if os.name=='nt' else 'clear')
print(" Some text goes here\n")
print(" Some other text goes here\n")
print(" Calculating something. Please wait until it is done.")
for x in range(10):
time.sleep(0.5)
sys.stdout.write('\r'+" "*20)
sys.stdout.write('\r'+" Loading"+"."*x)
cls()
print(" Some text goes here\n")
print(" Some other text goes here\n")
print(" We have concluded that blah blah blah")
但这太可怕了。如您所见,我需要5行新代码,刷新整个窗口并重复一些行。如果程序足够长,那么将每个打印文本保存在变量中以在清除整个窗口之前显示所有内容将非常痛苦。清除窗口也是有效的,但是如果命令窗口充满了打印件,那么在重新打印我们想要更改的行之前的所有内容时,负载将是明显的。
解决此问题最优雅的方法是什么?有没有办法擦除命令窗口中的特定行?或者也许用pythonian方法来删除最后的 n 行?
答案 0 :(得分:0)
您可以使用它来删除最后n行:
for i in range(n):
sys.stdout.write("\033[F") #Cursor up one line
sys.stdout.write("\033[K") #Erase this line