Многострочные индикаторы выполнения
Я знаю, что для обновления чего-то вроде индикатора выполнения в командной строке нужно использовать "\r". Есть ли способ обновить несколько строк?
4 ответа
Лучший способ - использовать некоторые существующие библиотеки, такие как ncurses. Но вы можете попробовать грязный обходной путь, очистив консоль системным вызовом: system("cls");
,
Если вы используете Python, попробуйте использовать благословения. Это действительно интуитивно понятная оболочка для проклятий.
Простой пример:
from blessings import Terminal
term = Terminal()
with term.location(0, 10):
print("Text on line 10")
with term.location(0, 11):
print("Text on line 11")
Если вы на самом деле пытаетесь реализовать индикатор выполнения, подумайте об использовании индикатора выполнения. Это сэкономит вам много \r
хлам.
На самом деле вы можете соединить благословения и прогрессбар вместе. Попробуйте запустить это:
import time
from blessings import Terminal
from progressbar import ProgressBar
term = Terminal()
class Writer(object):
"""Create an object with a write method that writes to a
specific place on the screen, defined at instantiation.
This is the glue between blessings and progressbar.
"""
def __init__(self, location):
"""
Input: location - tuple of ints (x, y), the position
of the bar in the terminal
"""
self.location = location
def write(self, string):
with term.location(*self.location):
print(string)
writer1 = Writer((0, 10))
writer2 = Writer((0, 20))
pbar1 = ProgressBar(fd=writer1)
pbar2 = ProgressBar(fd=writer2)
pbar1.start()
pbar2.start()
for i in range(100):
pbar1.update(i)
pbar2.update(i)
time.sleep(0.02)
pbar1.finish()
pbar2.finish()
Вы можете использовать коды VT100, чтобы переместить курсор на более высокую строку, а затем переопределить его с вашим обновленным статусом.
Библиотека Curses предлагает мощный контроль для консольных интерфейсов.