我刚刚了解到,要清除用Python打印的行,请执行以下操作: sys.stdout.write('\ x1b [2K')
为什么这么复杂?那奇怪的代码是什么意思?并且在打印命令中还有其他选择吗?
打印确实提供了“结束”选项,该选项允许在行中来回移动,但无法清除打印的内容。通过\ r覆盖并非总是有效,特别是如果新行比旧行短。您将从旧行中获得痕迹,因此我需要先清除。 谢谢。
答案 0 :(得分:4)
\x1b[2K
被称为ANSI terminal control sequence。它们是1970年代的传承,至今仍在使用(但已大大扩展)来控制终端仿真器。
\x1b
是ESCAPE的ASCII码(实际上是键盘上的ESC键)。 [2K
是命令“擦除当前行”。
Python中有许多可用于终端的库,例如Urwid。这些库将向您隐藏终端的内部工作原理,并为您提供用于创建TUI的更高层次的结构。
答案 1 :(得分:0)
我有一个脚本可以像这样打印鼠标的x,y坐标:
import pyautogui
import time
while True:
x, y = pyautogui.position()
position_string = "X: {} Y: {}".format(str(x).rjust(4), str(y).rjust(4))
print(position_string, end='')
print('\b' * len(position_string), end='', flush=True)
time.sleep(1)
我要指出的是,您可以在屏幕上有字符(len(position_string)
的时间以及与end=''
一起使用时打印退格字符('\ b')的次数。和flush=True
选项,它将始终打印在控制台内的一行上。我还应注意,这在IDLE中不起作用,而仅在实际命令行上有效!在IDLE中,退格字符实际上是打印为一些奇怪的方形...
答案 2 :(得分:0)
这称为ANSI escape code。 2K
是Erase in Line
的名称。从链接中引用:
删除行的一部分。如果n为0(或缺失),则从光标清除到行尾。如果n为1,则从光标到行首清除。如果n为2,则清除整行。光标位置不变。
您也可以在终端机上尝试echo -e '\x1b[2k'
以便更好地理解。
答案 3 :(得分:0)
但是,有一种更有效的方法: 您可以照常使用print()命令,并使用
删除屏幕os.system("cls") # For Windows
或
os.system("clear") # For Linux