Это сложно. Прежде всего, не все терминалы имеют одинаковые возможности. Например, \033[s
и \033[r
, о которых говорил Ли Райан, не работают на моем терминале. Безопаснее читать контрольные последовательности из базы данных терминала:
import os
sc = os.popen('tput sc').read()
rc = os.popen('tput rc').read()
print(sc + s, end='\r')
print(rc + s1, end='\r')
Однако, это не будет работать в Windows. Кроме того, он просто сохраняет координаты курсора в поле зрения, а не в истории прокрутки; поэтому, если вы сохраните курсор на последней строке, напечатаете что-то, прокручивающее экран и восстановите курсор, вы вообще не будете двигаться (как он вернется к - последней строке!)
Обходной путь, который я предлагал в комментариях, заключается в следующем:
import os
columns = int(os.popen('tput cols').read())
need_for_up = (len(s) - 1) // columns
cuu = os.popen('tput cuu %s' % need_for_up).read()
print(s, end='\r' + cuu)
print(s1)
Поскольку это не работает с координатами, но фактически перемещает курсор вверх от его положения, оно работает как внизу, так и нет.
Так как это также запрашивает базу данных Terminfo с использованием tput
, она также не будет работать в Windows. Будет ли это работать, если вы жестко закодируете cuu = "\033[%sA" % need_for_up
, я не знаю (не в Windows).