【问题标题】:What does this mean in Python '\x1b[2K'?这在 Python '\x1b[2K' 中意味着什么?
【发布时间】:2019-08-07 02:08:25
【问题描述】:

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

为什么这么复杂?那个奇怪的代码是什么意思?打印命令有什么替代方法吗?

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

【问题讨论】:

    标签: python printing


    【解决方案1】:

    \x1b[2K 就是所谓的ANSI terminal control sequence。它们是 1970 年代的遗留物,至今仍用于(但已大大扩展)来控制终端仿真器。

    \x1b 是 ESCAPE 的 ASCII(字面意思是键盘上的 ESC 键)。 [2K 是命令“擦除当前行”。

    Python 中有很多库可以用于终端,例如Urwid。这些库将对您隐藏终端的内部工作,并为您提供更高级别的构造来创建 TUI。

    【讨论】:

    • 好。我去看看那个图书馆。
    【解决方案2】:

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

    删除屏幕
    os.system("cls") # For Windows
    

    os.system("clear") # For Linux
    

    【讨论】:

    • 我不知道为什么这被否决了。我不会说它更有效,但它会清除屏幕......
    • @Reedinationer 我刚刚在 Jupyternotebook 中尝试过,没有用。它返回 0。它没有清除任何东西。此外,我不想清除所有内容。
    • @Alex 哦,好的。我认为您应该在投反对票时离开 cmets,以便发帖人知道出了什么问题并可能对其进行编辑以修复帖子。另外,将来访问该站点的人可以阅读某段代码的问题:)
    • @Reedinationer 不是我,抱歉。我是新人,不能投票。还是谢谢你。
    • 解决方案虽然简单,但并不普遍适用。清除线路的典型用例是在不乱扔终端的情况下显示进度(例如完成百分比和当前任务的描述)。 (人们通常只想留下“任务 X 已成功完成”之类的内容。)相反,清除整个终端也会删除更持久感兴趣的消息,例如警告。 @Alex 那是因为 Jupyter 笔记本打印到网页上的单元格,而不是 Windows 命令终端。见stackoverflow.com/a/24818304/4071801
    【解决方案3】:

    单行打印的替代方法

    我有一个脚本可以打印鼠标的 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 一起使用时选项,这将在控制台中的单行上不断打印。我还应该注意,这在 IDLE 中不起作用,而仅在实际命令行中起作用!在 IDLE 中,退格字符实际上被打印为一些奇怪的方形......

    【讨论】:

    • 不错的技巧,但您可以跟踪打印的数量,以便稍后按足够的后退空格将其擦除。如果你赶时间会头疼。
    【解决方案4】:

    这称为ANSI escape code2KErase in Line 的名称。引用链接:

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

    您也可以在终端尝试echo -e '\x1b[2k',以便更好地理解。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-23
      • 2012-05-29
      • 2016-06-28
      • 1970-01-01
      • 2010-10-21
      相关资源
      最近更新 更多