Используя Python 3.7, я пытаюсь переписать несколько строк вывода в командном окне (Windows 10 - cmd). Для одной строки это просто, так как я могу просто напечатать строку снова с помощью возврата каретки.
print('\r only once',end='')
print('\r only once',end='')
Однако это не будет работать, если есть несколько строк. Теперь я попытался сделать это, используя ascii control charachters. Это обычно делается в al oop, чтобы показать прогресс, но минимальный пример -
import os
import sys
import time
print("upper") #moves back in line
print("lower") #moves back in line
#time.sleep(1)
#os.system("pause")
sys.stdout.write("\033[K") #clear line
sys.stdout.write("\033[F") #back to previous line
sys.stdout.write("\033[K") #clear line
sys.stdout.write("\033[F") #back to previous line
sys.stdout.write("\033[K") #clear line
sys.stdout.write("\033[F") #back to previous line
print("new upper") #moves back in line
print("new lower") #moves back in line
Если он работает так или с time.sleep(1)
без комментария, вывод будет:
upper
lower
[K[F[K[F[K[Fnew upper
new lower
Если os.system("pause")
(только windows) не закомментирован, вывод верен
new upper
new upper
Кто-нибудь знает, почему os.system("pause")
меняет поведение из управляющих символов или как их вообще включить? В качестве альтернативы, есть ли у кого-нибудь другая (или, может быть, даже лучше) идея о том, как заменить многострочный вывод с python?