我有一个脚本,它使用一个简单的while循环来显示进度条,但它似乎没有像我预期的那样工作:
count = 1
maxrecords = len(international)
p = ProgressBar("Blue")
t = time
while count < maxrecords:
print 'Processing %d of %d' % (count, maxrecords)
percent = float(count) / float(maxrecords) * 100
p.render(int(percent))
t.sleep(0.5)
count += 1
它似乎在“p.render ...”循环,并且不会返回“打印'处理%d的%d ...'”。
更新:道歉。 ProgressBar.render()在呈现进度条时会删除“print'Processing ...”的输出。进度条来自http://nadiana.com/animated-terminal-progress-bar-in-python
答案 0 :(得分:5)
我看到你在我的网站上使用ProgressBar实现。如果要打印消息,可以使用render
中的message参数p.render(percent, message='Processing %d of %d' % (count, maxrecords))
答案 1 :(得分:3)
这不是用Python编写循环的方法。
maxrecords = len(international)
p = ProgressBar("Blue")
for count in range(1, maxrecords):
print 'Processing %d of %d' % (count, maxrecords)
percent = float(count) / float(maxrecords) * 100
p.render(int(percent))
time.sleep(0.5)
如果你真的想对记录做些什么,而不是只是渲染吧,你会这样做:
maxrecords = len(international)
for count, record in enumerate(international):
print 'Processing %d of %d' % (count, maxrecords)
percent = float(count) / float(maxrecords) * 100
p.render(int(percent))
process_record(record) # or whatever the function is
答案 2 :(得分:2)
ProgressBar.render()
的实施方式是什么?我假设它正在输出移动光标的终端控制字符,以便覆盖先前的输出。这可能会造成错误的印象,即控制流不能正常工作。
答案 3 :(得分:1)
(1)[不是问题的一部分,但是...] t = time
后来t.sleep(0.5)
跟随t
会让任何人看到裸露的count
烦恼向后看以找到它是什么。
(2)[不是问题的一部分,但是......] maxrecords
永远不能进入与maxrecords
具有相同值的循环。例如。如果maxrecords
为10,则循环中的代码仅被激活9次。
(3)你所展示的代码中没有任何东西可以支持它是“在p.render()循环”的想法 - 除非渲染方法本身循环,如果它的arg为零,这将是如果print "pretend-render: pct =", int(percent)
是17909.请尝试暂时替换p.render(....)(比如说)
{{1}}