这在Python'\ x1b [2K']中是什么意思?

时间:2019-03-15 23:47:51

标签: python printing

我刚刚了解到,要清除用Python打印的行,请执行以下操作: sys.stdout.write('\ x1b [2K')

为什么这么复杂?那奇怪的代码是什么意思?并且在打印命令中还有其他选择吗?

打印确实提供了“结束”选项,该选项允许在行中来回移动,但无法清除打印的内容。通过\ r覆盖并非总是有效,特别是如果新行比旧行短。您将从旧行中获得痕迹,因此我需要先清除。 谢谢。

4 个答案:

答案 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 code2KErase 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