我写了这个简单的函数“processing_flush”,以便打印一系列点(由索引给出)来测试我的软件是否正在处理我的数据并最终处理速度。 我的数据总大小未知。
import sys
import time
def processing_flush(n, index=5):
sys.stdout.write("\rProcessing %s" % ((n % index)* "."))
sys.stdout.flush()
for n in xrange(20):
processing_flush(n, index=5)
time.sleep(1)
我无法解决的问题是第一次打印所有点时(例如:处理....如果索引等于5),光标不会从零开始。
答案 0 :(得分:6)
在再次覆盖同一行之前,您需要至少清除带有空格的点的位置。
def processing_flush(n, index=5):
sys.stdout.write("\rProcessing %s" % (index * " "))
sys.stdout.write("\rProcessing %s" % ((n % index)* "."))
sys.stdout.flush()
上面的代码可能会导致一些短暂的闪烁。在您的特定情况下,当n % index
变为0时清除该行就足够了:
def processing_flush(n, index=5):
if n % index == 0:
sys.stdout.write("\rProcessing %s" % (index * " "))
sys.stdout.write("\rProcessing %s" % ((n % index)* "."))
sys.stdout.flush()
或者更好的是总是写index-1
个字符:
def processing_flush(n, index=5):
sys.stdout.write("\rProcessing %s%s" % ((n % index)* ".", (index - 1 - (n % index))* " "))
sys.stdout.flush()
修改1:或者如果您希望光标始终位于最后一个点之后:
def processing_flush(n, index=5):
sys.stdout.write("\rProcessing %s%s" % ((n % index)* ".", (index - 1 - (n % index))* " "))
sys.stdout.write("\rProcessing %s" % ((n % index)* "."))
sys.stdout.flush()
编辑2:或者如果您希望光标始终位于该行的开头:
def processing_flush(n, index=5):
sys.stdout.write("Processing %s%s\r" % ((n % index)* ".", (index - 1 - (n % index))* " "))
sys.stdout.flush()
原因是如果你只覆盖它的第一部分,你的shell会记住上一行的剩余字符。