您需要控制对stdout的写入和刷新。因此,ma3oun给出的链接很有价值。不幸的是,PyCharm控制台的工作原理不同于命令行。有关其工作方式的问题,应直接联系PyCharm团队,并可能要求他们更改此行为。
import sys
import time
for i in range(10):
sys.stdout.write("\r{0}".format(str(i)))
sys.stdout.flush()
time.sleep(1)
但是,对于较短的睡眠时间(例如0.1),刷新短缓冲区存在问题。对于每次刷新,您获得的不仅仅是打印的一个写入值。作为一种解决方法,我发现您可以添加另一个\ r:
for i in range(10):
sys.stdout.write("\r \r {0}".format(str(i)))
sys.stdout.flush()
time.sleep(0.1)
这将强制控制台仅显示一个写入值,但是您会在两次显示之间失去一些值,因为它看起来像刷新速率慢于0.1秒。
import sys
import time
progressVis = {0: ' ', 1: '- ', 2: '-- ', 3: '--- ', 4: '---- ', 5: '----- ',
6: '------ ', 7: '------- ', 8: '-------- ', 9: '--------- ', 10: '----------'}
size = 20
for i in range(0, size):
percent = int((float(i + 1) / size) * 10)
str1 = "\r \r [{0}] {1}/{2} {3}%".format(progressVis[percent],
i + 1, size,
((i + 1) * 100 / size))
sys.stdout.write(str1)
sys.stdout.flush()
time.sleep(0.1)