Что я могу использовать для возврата на одну строку назад в терминале в Python?

Я могу вернуться на один символ назад, используя \b:

>>> print("123#456")
123#456
>>> print("123#\b456")
123456

Но это не работает, если речь идет о разрыве строки:

>>> print("123#\n456")
123#
456
>>> print("123#\n\b456")
123#
456

Есть ли способ вернуть разрыв строки?

Я спрашиваю об этом, потому что у меня есть прогресс в предыдущей строке:

53%

И я пользуюсь \b обновить значение. Но если кто-то что-то печатает, это ломает. Я попытался создать буфер строк и напечатать достаточно \ 'b', чтобы компенсировать это, затем распечатать буфер обратно. Но это не работает, если есть разрывы строк.

1 ответ

Решение

Одним из возможных (немного хакерских) решений является использование \033[1A'для возврата на одну строку назад. Замените 1 количеством строк, чтобы вернуться назад. Есть несколько других escape-последовательностей, которые вы можете использовать для управления курсором. Ознакомьтесь с полным списком по адресу: http://www.tldp.org/HOWTO/Bash-Prompt-HOWTO/x361.html

- Position the Cursor:
  \033[<L>;<C>H
     Or
  \033[<L>;<C>f
  puts the cursor at line L and column C.
- Move the cursor up N lines:
  \033[<N>A
- Move the cursor down N lines:
  \033[<N>B
- Move the cursor forward N columns:
  \033[<N>C
- Move the cursor backward N columns:
  \033[<N>D

- Clear the screen, move to (0,0):
  \033[2J
- Erase to end of line:
  \033[K

- Save cursor position:
  \033[s
- Restore cursor position:
  \033[u

Обратите внимание, что это, вероятно, не будет работать для всех терминалов.

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