Многострочные индикаторы выполнения

Я знаю, что для обновления чего-то вроде индикатора выполнения в командной строке нужно использовать "\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 предлагает мощный контроль для консольных интерфейсов.

Другие вопросы по тегам