Py学习  »  Python

这在python'\x1b[2k'中意味着什么?

Alex • 5 年前 • 3577 次点击  

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

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

打印确实提供了“结束”选项,允许在行中来回移动,但无法清除所打印的内容。覆盖via \r并不总是有效,特别是当新行比旧行短时。你会从旧线路上找到痕迹,所以我需要先清除。 谢谢。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/38258
 
3577 次点击  
文章 [ 4 ]  |  最新文章 5 年前
Leon Wiesen
Reply   •   1 楼
Leon Wiesen    6 年前

但是,有一种更有效的方法可以做到这一点: 您可以像往常一样使用print()命令,并使用

os.system("cls") # For Windows

os.system("clear") # For Linux
Xin Wang
Reply   •   2 楼
Xin Wang    6 年前

这个叫 ANSI escape code . 2K 是的名称 Erase in Line . 从链接引用:

删除行的一部分。如果n为0(或丢失),则从光标清除到行尾。如果n为1,则从光标到行首清除。如果n为2,则清除整行。光标位置不变。

你也可以试试 echo -e '\x1b[2k' 为了更好的理解。

Reedinationer
Reply   •   3 楼
Reedinationer    6 年前

替代单行打印

我有一个脚本可以打印鼠标的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)

在这里我将指出,您可以打印退格字符(“\b”)屏幕上有字符的次数。( len(position_string) )以及与 end='' flush=True 选项这将持续打印在控制台中的一行上。我还应该注意到,这不适用于空闲状态,而只适用于实际的命令行!在空闲时,退格符实际上被打印成一些奇怪的方形…

TkTech
Reply   •   4 楼
TkTech    6 年前

\x1b[2K 被称为 ANSI terminal control sequence . 它们是20世纪70年代的遗留物,现在仍在使用(但已广泛扩展)来控制终端仿真器。

\x1b 是用于转义的ASCII(字面上是键盘上的Esc键)。 [2K 是命令“删除当前行”。

在python中有许多库用于处理终端,例如 Urwid . 这些库将隐藏终端的内部工作,并为您提供更高级别的构造来创建TUIS。