在Python中模拟加载栏的最佳方法(命令行)

时间:2014-11-18 16:45:04

标签: python

我以前看过这个,但我似乎无法让它发挥作用。

这是我所拥有的最好的,但如果我希望它出现在包含其他信息的屏幕上,它就无法运作:

timer = 0
loading = "Loading: [----------]"

while timer < 11:
    os.system('clear')
    print loading
    loading = loading.replace("-","=",1)
    time.sleep(1)
    timer += 1
time.sleep(1)
os.system('clear')
print loading+" Complete!"


我更喜欢一种适用于Windows和Linux的方法,不需要一个没有库存的模块(所以我可以给其他人这个有windows或linux的程序,让它工作正常)

如果不是那样还可以。我总能有一个&#34;依赖&#34;列表。

先谢谢了。 :)

2 个答案:

答案 0 :(得分:1)

诀窍是跳过在消息末尾写一个新行并使用退格键清除下一轮。使用带有flush的sys.stdout来跳过新行,并使用与要清除的消息一样多的退格:

import os
import sys
import time

timer = 0
loading = "Loading: [----------]"
backtrack = '\b'*len(loading)

while timer < 11:
    sys.stdout.write(backtrack + loading)
    sys.stdout.flush()
    loading = loading.replace("-","=",1)
    time.sleep(1)
    timer += 1
time.sleep(1)
sys.stdout.write(backtrack)
print loading+" Complete!"

答案 1 :(得分:-1)

所以,感谢martineau的评论,我能够做到这一点:

import time,sys
loading = "Loading: [----------]"
for i in range(101):
    time.sleep(0.1)
    sys.stdout.write("\r"+loading+" %d%%" % i)
    if i == 10 or i == 20 or i == 30 or i == 40 or i == 50 or i == 60 or i == 70 or i == 80 or i == 90 or i == 100:
        loading = loading.replace("-","=",1)
    sys.stdout.flush()