Возврат каретки не работает в Терминаторе, но работает нормально в Терминале в Ubuntu
Я использую '\r' в функции печати в Python 2.7. Он отлично работает в терминале, но не в терминаторе.
Например:
Я использую счетчик декрементов, который уменьшается от n до 0. В Терминале значения счетчиков обновляются в той же строке, а в терминаторе значения счетчиков печатаются в новой строке. Я использую терминатор по различным причинам, таким как его расширенные функции, такие как разделение вкладок и т. Д. Ниже приведен снимок кода
import sys
import time
if __name__ == "__main__":
sleep_time_in_sec = 15
time_to_go_back_mns = 10
for remaining in range(sleep_time_in_sec, -1, -1):
sys.stdout.write("\r")
sys.stdout.write(
"{:2d} seconds remaining to read last {:2d} minutes of data and perform prediction .....".format(remaining,
time_to_go_back_mns))
sys.stdout.flush()
time.sleep(1)
Может кто-нибудь, пожалуйста, предложите исправить
2 ответа
Ответ на этот пост идет к @Rick van Lieshout.
В моем случае я использовал несколько вкладок в одном окне, в результате чего \r не работал. Он работал нормально, когда я использовал его в отдельном окне или на вкладке с полной горизонтальной шириной.
Просто поместите \r в конце вашего оператора write следующим образом:
sys.stdout.write(
"{:2d} seconds remaining to read last {:2d} minutes of data and perform prediction .....\r".format(remaining,
time_to_go_back_mns))
Новые данные затем перезапишут строку, вы можете использовать flush(), чтобы очистить строку перед записью в нее:
sys.stdout.flush()
Убедитесь, что на стороне терминатора все настройки вашего профиля чистые. Обязательно проверьте вкладку совместимости, так как там упоминается странное поведение приложения.
обратите внимание, что возврат каретки перестает работать, если размер терминала слишком мал. Он вернется только к первому символу последней строки
Оригинальный ответ
\r
на самом деле означает "возврат каретки", тогда как \n
это перевод строки. В Linux (Unix) вы обычно используете либо \n
или же \r\n
,
Поэтому, если ваша цель - перейти на новую линию, вы должны использовать \n
вместо.
Причина, по которой он может работать в "терминале" (какой бы он ни был), заключается в том, что некоторые терминалы (особенно терминал gnome) перехватывает \r
и рассматривает это как \r\n
,