Обратная печать на Python 3.x функция
import time
def close_garage_dors():
a= '_ _ _'
for i in range(5):
time.sleep(1)
print(a)
return 'Doors are closed'
Теперь мой вопрос: как открыть эту дверь:) В основном, как отменить эту функцию, как удалить 5 строк _ _ _? Есть идеи?
3 ответа
Вы должны быть в состоянии использовать инструменты VT100:
CURSOR_UP_ONE = '\x1b[1A' # Cursor up one line
ERASE_LINE = '\x1b[2K' # Erase current line
print(CURSOR_UP_ONE + ERASE_LINE)
или escape-последовательность ANSI:
CURSOR_UP_ONE = '\033[F' # Cursor up one line
ERASE_LINE = '\033[K' # Clear to the end of line (not erase)
Проверено и работает:
import time
CURSOR_UP_ONE = '\x1b[1A' # <--Replace with '\033[F' if you don't have VT100
ERASE_LINE = '\x1b[2K' # <--Replace with '\033[K' if you don't have VT100
def close_garage_dors():
a = '_ _ _'
for i in range(5):
time.sleep(.5)
print(a)
for b in range(5):
time.sleep(.5)
print(CURSOR_UP_ONE + ERASE_LINE + CURSOR_UP_ONE)
close_garage_dors()
В зависимости от вашей консоли вам может понадобиться использовать код ANSI вместо инструментов VT100.
После того, как вы напечатаете новую строку, вы не можете удалить ее. Так, например, невозможно печатать поверх предыдущих 5 строк пустыми строками.
Вместо этого вы можете попытаться напечатать очень большое число (т.е. высоту экрана в строках) пустых строк, чтобы представить новый пустой экран.
Если вы хотите перезаписать вывод вашей консоли, вы должны заменить функцию печати на:
print(a),
Эта запятая говорит интерпретатору писать на консольном stdout и не печатать новую строку, в противном случае вы можете использовать sys.stdout.write:
import sys
sys.stdout.write(a)
sys.stdout.write('\r')