【发布时间】:2015-04-23 10:39:39
【问题描述】:
我有一个迭代两个字符串数组的测试脚本,我想使用sys.stdout.write 为用户提供一个简单的“进度条”。
我当前的脚本:
import sys
from time import sleep
names = ['Serv1', 'Serv2', 'Serv3', 'Serv4', 'Serv5']
states = ['Running', 'Stopped', 'Running', 'Running', 'Stopped']
terminated=0
passed=0
for i in range (0, len(names)):
if 'Running' in states[i]:
print " [*] stop if running {0} ".format(str(names[i]))
#service_info(action, machine, names[i])
terminated+=1
else:
print " [!] Passing over {0} ".format(str(names[i]))
passed+=1
sleep(2)
sys.stdout.write(" [ ] {0}/{1} progress left\r".format(i+1, len(names)))
预期的输出是sys.stdout.write 不断更新,而打印语句正在通知用户某些操作。但是当我运行它时,唯一一次显示sys.stdout.write 是在脚本的末尾。例如
[*] stop if running Serv1
[!] Passing over Serv2
[*] stop if running Serv3
[*] stop if running Serv4
[!] Passing over Serv5
[ ] 5/5 progress left
如何在更新时将进度显示在所有打印件下方?
【问题讨论】:
-
那些是每行的,默认情况下你不能回去写上一行。一种方法是清除屏幕并一次又一次地写入所有行或一些Windows api。 stackoverflow.com/questions/7122775/…
-
我有另一个脚本可以扫描任何主机 ip 地址上的端口,它成功打印并同时提供进度输出。我直接从中复制了部分,但在这个示例中似乎不起作用。
标签: python python-2.7 stdout sys