Windows上的Python控制台中的进度条

问题描述 投票:2回答:2

我已经通过以下两个链接以及其他一些链接,我已经尝试了大多数提供的所有示例和建议,但在我的输出中,进度条没有得到更新,而是新的显示,无论是同一行的结尾还是交替地新队。我在这里缺少什么,有人可以指导我。

Python Progress Bar

Text Progress Bar in the Console

为了方便起见,我正在复制我尝试过的一些代码(来自上述线程的例子)及其输出。我是否理解错误,它将更新同一行或我错过了什么。感谢您的帮助。我在Windows 7上使用Python 3.4并在控制台上获取输出(无GUI)。

例1:

import progressbar
import time, sys

progress = progressbar.ProgressBar()
for i in progress(range(80)):
    time.sleep(0.01)

输出1:

>>> 
  0% |                                                                        |
  1% |                                                                        |
  2% |#                                                                       |
  3% |##                                                                      |
  5% |###                                                                     |
  6% |####                                                                    |
  7% |#####                                                                   |
  8% |######                                                                  |
 10% |#######                                                                 |
 11% |########                                                                |
 12% |#########                                                               |
 13% |#########                                                               |
 15% |##########                                                              |
 16% |###########                                                             |
 17% |############                                                            |
 18% |#############                                                           |
 20% |##############                                                          |
 21% |###############                                                         |
 22% |################                                                        |
 23% |#################                                                       |
 25% |##################                                                      |
 26% |##################                                                      |
 27% |###################                                                     |
 28% |####################                                                    |
 30% |#####################                                                   |
 31% |######################                                                  |
 32% |#######################                                                 |
 33% |########################                                                |
 35% |#########################                                               |
 36% |##########################                                              |
 37% |###########################                                             |
 38% |###########################                                             |
 40% |############################                                            |
 41% |#############################                                           |
 42% |##############################                                          |
 43% |###############################                                         |
 45% |################################                                        |
 46% |#################################                                       |
 47% |##################################                                      |
 48% |###################################                                     |
 50% |####################################                                    |
 51% |####################################                                    |
 52% |#####################################                                   |
 53% |######################################                                  |
 55% |#######################################                                 |
 56% |########################################                                |
 57% |#########################################                               |
 58% |##########################################                              |
 60% |###########################################                             |
 61% |############################################                            |
 62% |#############################################                           |
 63% |#############################################                           |
 65% |##############################################                          |
 66% |###############################################                         |
 67% |################################################                        |
 68% |#################################################                       |
 70% |##################################################                      |
 71% |###################################################                     |
 72% |####################################################                    |
 73% |#####################################################                   |
 75% |######################################################                  |
 76% |######################################################                  |
 77% |#######################################################                 |
 78% |########################################################                |
 80% |#########################################################               |
 81% |##########################################################              |
 82% |###########################################################             |
 83% |############################################################            |
 85% |#############################################################           |
 86% |##############################################################          |
 87% |###############################################################         |
 88% |###############################################################         |
 90% |################################################################        |
 91% |#################################################################       |
 92% |##################################################################      |
 93% |###################################################################     |
 95% |####################################################################    |
 96% |#####################################################################   |
 97% |######################################################################  |
 98% |####################################################################### |
100% |########################################################################|

例2:

for i in range(0, 101, 10):
  sys.stdout.write('\r>> You have finished %3d%%\r' % i)
  sys.stdout.flush()
  sys.stdout.flush()
  time.sleep(1)
print

输出2:

你已经完成0%>>你已经完成了10%>>你已经完成了20%>>你已经完成了30%>>你已经完成了40%>>你已经完成了50%>>你已经完成了60%>>你已完成70%>>你已经完成了80%>>你已经完成了90%>>你已经完成了100%

例3:

def update_progress(progress):
    barLength = 20 # Modify this to change the length of the progress bar
    status = ""
    if isinstance(progress, int):
        progress = float(progress)
    if not isinstance(progress, float):
        progress = 0
        status = "error: progress var must be float\r\n"
    if progress < 0:
        progress = 0
        status = "Halt...\r\n"
    if progress >= 1:
        progress = 1
        status = "Done...\r\n"
    block = int(round(barLength*progress))
    text = "\rPercent: [{0}] {1}% {2}".format( "="*block + " "*(barLength-block), progress*100, status)
    sys.stdout.write(text)
    sys.stdout.flush()

print("")
print("progress : 0->1")
for i in range(101):
    time.sleep(0.1)
    update_progress(i/100.0)

print("")
print("Test completed")
time.sleep(1)

输出3:

>>> 

progress : 0->1

Percent: [                    ] 0.0% 
Percent: [                    ] 1.0% 
Percent: [                    ] 2.0% 
Percent: [=                   ] 3.0% 
Percent: [=                   ] 4.0% 
Percent: [=                   ] 5.0% 
Percent: [=                   ] 6.0% 
Percent: [=                   ] 7.000000000000001% 
Percent: [==                  ] 8.0% 
Percent: [==                  ] 9.0% 
Percent: [==                  ] 10.0% 
Percent: [==                  ] 11.0% 
Percent: [==                  ] 12.0% 
Percent: [===                 ] 13.0% 
Percent: [===                 ] 14.000000000000002% 
Percent: [===                 ] 15.0% 
Percent: [===                 ] 16.0% 
Percent: [===                 ] 17.0% 
Percent: [====                ] 18.0% 
Percent: [====                ] 19.0% 
Percent: [====                ] 20.0% 
Percent: [====                ] 21.0% 
Percent: [====                ] 22.0% 
Percent: [=====               ] 23.0% 
Percent: [=====               ] 24.0% 
Percent: [=====               ] 25.0% 
Percent: [=====               ] 26.0% 
Percent: [=====               ] 27.0% 
Percent: [======              ] 28.000000000000004% 
Percent: [======              ] 28.999999999999996% 
Percent: [======              ] 30.0% 
Percent: [======              ] 31.0% 
Percent: [======              ] 32.0% 
Percent: [=======             ] 33.0% 
Percent: [=======             ] 34.0% 
Percent: [=======             ] 35.0% 
Percent: [=======             ] 36.0% 
Percent: [=======             ] 37.0% 
Percent: [========            ] 38.0% 
Percent: [========            ] 39.0% 
Percent: [========            ] 40.0% 
Percent: [========            ] 41.0% 
Percent: [========            ] 42.0% 
Percent: [=========           ] 43.0% 
Percent: [=========           ] 44.0% 
Percent: [=========           ] 45.0% 
Percent: [=========           ] 46.0% 
Percent: [=========           ] 47.0% 
Percent: [==========          ] 48.0% 
Percent: [==========          ] 49.0% 
Percent: [==========          ] 50.0% 
Percent: [==========          ] 51.0% 
Percent: [==========          ] 52.0% 
Percent: [===========         ] 53.0% 
Percent: [===========         ] 54.0% 
Percent: [===========         ] 55.00000000000001% 
Percent: [===========         ] 56.00000000000001% 
Percent: [===========         ] 56.99999999999999% 
Percent: [============        ] 57.99999999999999% 
Percent: [============        ] 59.0% 
Percent: [============        ] 60.0% 
Percent: [============        ] 61.0% 
Percent: [============        ] 62.0% 
Percent: [=============       ] 63.0% 
Percent: [=============       ] 64.0% 
Percent: [=============       ] 65.0% 
Percent: [=============       ] 66.0% 
Percent: [=============       ] 67.0% 
Percent: [==============      ] 68.0% 
Percent: [==============      ] 69.0% 
Percent: [==============      ] 70.0% 
Percent: [==============      ] 71.0% 
Percent: [==============      ] 72.0% 
Percent: [===============     ] 73.0% 
Percent: [===============     ] 74.0% 
Percent: [===============     ] 75.0% 
Percent: [===============     ] 76.0% 
Percent: [===============     ] 77.0% 
Percent: [================    ] 78.0% 
Percent: [================    ] 79.0% 
Percent: [================    ] 80.0% 
Percent: [================    ] 81.0% 
Percent: [================    ] 82.0% 
Percent: [=================   ] 83.0% 
Percent: [=================   ] 84.0% 
Percent: [=================   ] 85.0% 
Percent: [=================   ] 86.0% 
Percent: [=================   ] 87.0% 
Percent: [==================  ] 88.0% 
Percent: [==================  ] 89.0% 
Percent: [==================  ] 90.0% 
Percent: [==================  ] 91.0% 
Percent: [==================  ] 92.0% 
Percent: [=================== ] 93.0% 
Percent: [=================== ] 94.0% 
Percent: [=================== ] 95.0% 
Percent: [=================== ] 96.0% 
Percent: [=================== ] 97.0% 
Percent: [====================] 98.0% 
Percent: [====================] 99.0% 
Percent: [====================] 100% Done...


Test completed
>>> 

编辑:您可以看到在同一行上打印正在发生,但它会在最后一次打印结束时附加而不是覆盖,这是所需的效果。谢谢!

python python-3.x progress-bar windows-7-x64
2个回答
1
投票
>>> import time
>>> for i in range(0, 101, 10):
...     print('\rYou have finished %3d%%' % i, end='', flush=True)
...     time.sleep(1)
... else:
...     print()
...
You have finished 100%
>>>

适用于win32的Python 3.4.3 ...

空闲不会正确渲染回车。

看看python print one line same space。 “完成,我的错误我正在使用IDLE”或Implementing a backspace in Python 3.3.2 Shell using Idle

Idle更像是一个Python文本编辑器,没有真正的控制台...因此你无法解释控制符号并同时正确打印它...

>>> print("asd\rfgh")
asdfgh

0
投票

这是我在我的应用程序中使用的类。适用于Windows 7。

检查百分比是否改变不重复打印每次迭代,print()操作繁重

class ProgressBar:
    """
    Create command-line-style ProgressBar
    """
    def __init__(self, total, prefix='', suffix='', length=100, fill='*'):
        """
        Init ProgressBar
        Start position is always 0, end position is total.
        Usage example:
        progress_bar = ProgressBar(l, prefix='Progress:', suffix='Complete', length=50)
        while some():
            progress_bar.iterate(i + 1)
        :param total: Required, total iterations (Int)
        :param prefix: Optional, prefix string (Str)
        :param suffix: Optional, suffix string (Str)
        :param length: Optional, character length of bar (Int)
        :param fill: Optional, bar fill character (Str)
        """
        self.counter = 0
        self.prev_counter = 0
        self.total = total
        self.percent_size = total/100
        self.prefix = prefix
        self.suffix = suffix
        self.length = length
        self.fill = fill

    def iterate(self, iteration):
        """
        Call in a loop to create terminal progress bar
        @param: iteration: Required, current iteration (Int)
        """
        self.prev_counter = int(iteration/self.percent_size)
        filled_length = int((self.prev_counter/100) * self.length)
        bar = self.fill * filled_length + '-' * (self.length - filled_length)
        if self.prev_counter != self.counter:
            print('\r%s |%s| %s%% %s' % (self.prefix, bar, self.prev_counter, self.suffix), end='\r')
        self.counter = self.prev_counter
        # Print New Line on Complete
        if iteration == self.total:
            print()
© www.soinside.com 2019 - 2024. All rights reserved.