多行进度条

时间:2009-11-13 04:38:41

标签: command-line progress-bar

我知道要在命令行上更新类似进度条的内容,请使用'\ r'。有没有办法更新多行?

4 个答案:

答案 0 :(得分:5)

如果您正在使用Python,请尝试使用blessings。这是一个非常直观的诅咒包装。

简单示例:

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")

如果您确实尝试实施进度条,请考虑使用 progressbar。它会为你节省很多\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()

multiline-progress

答案 1 :(得分:4)

最好的方法是使用像ncurses这样的现有库。但是,您可以通过系统调用清除控制台来尝试脏解决方法:system("cls");

答案 2 :(得分:2)

您可以使用VT100 codes将光标重新定位在更高的行上,然后使用更新后的状态对其进行透支。

答案 3 :(得分:1)

Curses库为控制台用户界面提供了强大的控制功能。