Что это значит в Python '\ x1b [2K'? - PullRequest
2 голосов
/ 16 марта 2019

Я только что узнал, что для очистки строки, которую вы напечатали в Python, сделайте следующее: sys.stdout.write ( '\ X1B [2K')

Почему это так сложно? что означает этот странный код? и есть ли альтернатива в команде печати?

Печать действительно предлагает опцию «конец», которая позволяет переходить вперед и назад по строкам, но не позволяет очистить то, что вы напечатали. Перезапись через \ r не всегда работает, особенно если новая строка короче старой. Вы получите следы от старой линии, поэтому мне нужно сначала очистить. Спасибо.

Ответы [ 4 ]

4 голосов
/ 16 марта 2019

\x1b[2K - это то, что известно как последовательность управления терминалом ANSI .Они являются наследием 1970-х годов и до сих пор используются (но значительно расширились) для управления эмуляторами терминала.

\x1b - это ASCII для ESCAPE (буквально клавиша ESC на клавиатуре).[2K - это команда «стереть текущую строку».

В Python есть много библиотек для работы с терминалом, например Urwid .Эти библиотеки скрывают от вас внутреннюю работу терминала и предоставляют вам высокоуровневые конструкции для создания TUI.

0 голосов
/ 16 марта 2019

Однако есть гораздо более эффективный способ сделать это: вы можете использовать команду print () как обычно, и удалить экран, используя

os.system("cls") # For Windows

или

os.system("clear") # For Linux
0 голосов
/ 16 марта 2019

Это называется Экранирующий код ANSI .2K - это имя для Erase in Line.Цитата по ссылке:

Стирает часть строки.Если n равно 0 (или отсутствует), очистите курсор от конца строки.Если n равно 1, очистите курсор от начала строки.Если n равно 2, очистите всю строку.Положение курсора не меняется.

Вы также можете попробовать echo -e '\x1b[2k' в терминале для лучшего понимания.

0 голосов
/ 16 марта 2019

Альтернатива печати в одну строку

У меня есть скрипт, который печатает координаты 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 символы backspace на самом деле печатаются в виде какой-то странной квадратной формы ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...