При динамической печати, как удалить всю строку? - PullRequest
0 голосов
/ 20 марта 2019

В python для динамической печати стандартным методом является возврат каретки.

Вот так

sys.stdout.write(f"\r {some_str}")
sys.stdout.flush()

#or

print(f"{some_str}", end="\r", flush=True)

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

for i in range(100):  
   print(f"{10000*(99-i)} text", end='\r', flush=True)
   time.sleep(0.03)

заканчивается следующим как окончательный результат

0 texttextt

вместо

0 text

Как заставить программу полностью стереть строку перед следующим вводом?

1 Ответ

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

Общее решение этого вопроса на удивление сложное и, вероятно, включает использование curses или какого-либо подобного модуля для абстрагирования большинства системных зависимостей.

В вашем случае, самое простое решение - это, вероятно,добавьте число (используя что-то вроде ...:6d в шаблоне формата), чтобы оно всегда имело одинаковую длину.В качестве альтернативы, вы можете поместить подходящее количество пробелов в конце строки, чтобы оно стирало все, что следует за ним, по мере того, как оно становится короче.Оба эти решения вызывают проблемы, если строка настолько длинная, что оборачивается.

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