Запись строки с escape-последовательностями ANSI в файл

Модуль Python, который я использую, обеспечивает ловушку, которая позволяет захватывать ввод с клавиатуры пользователя перед его отправкой на терминал оболочки. Проблема, с которой я сталкиваюсь, заключается в том, что он вводит ввод за символом, что затрудняет захват команд ввода, когда пользователь выполняет такие действия, как возврат или перемещение курсора.

Например, с учетом строки выхода \x1b[4D\x1b[J- покажи себя, происходит следующее:

>>> a = exit\x1b[4D\x1b[Jshow myself out
>>> print(a)
show myself out

>>> with open('file.txt', 'w+') as f:
>>>     f.write(a)
>>> exit()
less abc.txt

Команда less отображает необработанную команду (exit\x1b[4D\x1b[Jshowself out)), когда на самом деле я бы хотел, чтобы она сохранялась "чисто", как она отображается при использовании функции печати (показать себя).

Печать результата или "кошачий" файл показывают именно то, что я хотел бы отобразить, но я предполагаю, что терминал преобразует вывод.

Есть ли способ добиться "чистой" записи в файл, используя какой-либо модуль python или какую-либо утилиту bash? Конечно, должен быть какой-то модуль, который может сделать это для меня?

1 ответ

less интерпретирует управляющие символы.

Вы можете обойти это с -r опция командной строки:

$ less -r file.txt 
show myself out

Из руководства:

   -r or --raw-control-chars
          Causes "raw" control characters to be displayed.  The default is
          to display control characters  using  the  caret  notation;  for
          example, a control-A (octal 001) is displayed as "^A".  Warning:
          when the -r option is used, less cannot keep track of the actual
          appearance  of  the screen (since this depends on how the screen
          responds to each type of control character).  Thus, various dis‐
          play  problems may result, such as long lines being split in the
          wrong place.

Необработанные управляющие символы отправляются на терминал, который затем интерпретирует их как cat было бы.

Как уже говорили другие, вам нужно будет самостоятельно интерпретировать символы, прежде чем записывать их в файл.

Другие вопросы по тегам