在屏幕上显示进度条以及其他输出

时间:2014-08-20 02:15:37

标签: python progress-bar command-line-interface

我编写了一个处理文件的Python命令行脚本。

我希望有一个进度条显示已完成的工作量,但我还希望在屏幕上看到一些额外的输出。

我发现this script对进度条有很大帮助,但我没有找到如何添加额外输出。

我想要的是输出,例如:

[======              ] 30%
Error: File 'test.png' could not be processed.
Error: File 'yet_another_test.jpg' could not be processed.

在处理过程中更新进度条...

提前致谢!

2 个答案:

答案 0 :(得分:1)

我不知道这是不是你想要的。希望它有所帮助。

#!/usr/bin/env python
#-*- coding:utf-8 -*-

import sys
import time
import math

# Output example: [=======   ] 75%

# width defines bar width
# percent defines current percentage
def progress(width, percent):
    marks = math.floor(width * (percent / 100.0))
    spaces = math.floor(width - marks)

    loader = '[' + ('=' * int(marks)) + (' ' * int(spaces)) + ']'

    sys.stdout.write("%s %d%%\r" % (loader, percent))
    if percent >= 100:
        sys.stdout.write("\n")
    sys.stdout.flush()

def func():    
    try:
        # you can do your things here
        assert 0, 'hahahah'
    except Exception as e:
        sys.stdout.write(repr(e)+'\r')
        sys.stdout.flush()    


# Simulate doing something...
for i in xrange(100):
    progress(50, (i + 1)) # +1 because xrange is only 99
    if i == 6:
        func()
    time.sleep(0.1) # Slow it down for demo

答案 1 :(得分:0)

你想要什么,无法完美实现,因为当你将某些内容打印到新行时,'\r'将不会将光标返回到上一行。然而,你可以在进度条结束时输出你想要的任何其他信息,尽管它确实看起来很奇怪!