Динамическое обновление текста в том же месте на терминале Python 2.7
Моя программа написана на Python 2.7, и я хочу сделать динамическое обновление. Вывод в виде таблицы и имеет сотни символов. Действительно хороший ответ, который я нашел здесь, однако, более 100 символов, которые он раздавил (как обещано в статье). Более того, я не знаю, сколько строк в таблице, она динамически меняется. Кроме того, я не хочу использовать curses, потому что я хочу, чтобы вывод был встроенным в консоли, как при выполнении "обычной" команды
Пример вывода:
+------+--------------+-------------+
| Type | IP Address | Status |
+------+--------------+-------------+
| aa | 10.11.10.10 | in Progress |
| bb | 10.11.10.10 | in Progress |
| cccc | 10.11.10.10 | in Progress |
| aa | 10.11.10.10 | in Progress |
| aa | 10.11.10.10 | in Progress |
| bb | 10.11.10.10 | in Progress |
| cccc | 10.11.10.10 | in Progress |
| bb | 10.11.10.10 | in Progress |
+------+--------------+-------------+
Я пытаюсь избежать:
+------+--------------+-------------+
| Type | IP Address | Status |
+------+--------------+-------------+
| aa | 10.11.10.10 | in Progress |
| bb | 10.11.10.10 | in Progress |
| cccc | 10.11.10.10 | in Progress |
| aa | 10.11.10.10 | in Progress |
| aa | 10.11.10.10 | in Progress |
| bb | 10.11.10.10 | in Progress |
| cccc | 10.11.10.10 | in Progress |
| bb | 10.11.10.10 | in Progress |
+------+--------------+-------------+
+------+--------------+-------------+
| Type | IP Address | Status |
+------+--------------+-------------+
| aa | 10.11.10.10 | in Progress |
| bb | 10.11.10.10 | in Progress |
| cccc | 10.11.10.10 | in Progress |
| aa | 10.11.10.10 | in Progress |
| aa | 10.11.10.10 | in Progress |
| bb | 10.11.10.10 | in Progress |
| cccc | 10.11.10.10 | in Progress |
| bb | 10.11.10.10 | in Progress |
+------+--------------+-------------+
+------+--------------+-------------+
| Type | IP Address | Status |
+------+--------------+-------------+
| aa | 10.11.10.10 | in Progress |
| bb | 10.11.10.10 | in Progress |
| cccc | 10.11.10.10 | in Progress |
| aa | 10.11.10.10 | in Progress |
| aa | 10.11.10.10 | in Progress |
| bb | 10.11.10.10 | in Progress |
| cccc | 10.11.10.10 | in Progress |
| bb | 10.11.10.10 | in Progress |
+------+--------------+-------------+
1 ответ
Вы можете использовать код ANSI для перехода на несколько строк. Это должно работать в Linux:
import time
import sys
for i in range(0, 100):
# print 4 lines
print ("line 1\nline 2\nline 3")
print (str(i))
time.sleep(0.2)
sys.stdout.write("\033[4A") # go up 4 lines
Это будет работать в некоторых терминалах. Работало в windows putty. Если вы вернетесь больше, чем на количество строк в терминале замазки, это не позволит вам свернуть текст вверх, он переместит курсор на первую видимую строку. Исходный код ANSII.