#!/usr/bin/python
import time
count = 5
temp = True
while temp:
if count < 1:
print "done",
temp = False
else:
print "*"
time.sleep(2)
count -= 1
输出:
*
*
*
*
*
done
请注意,输出中的“*”在屏幕上以2秒的间隔一个接一个地打印(这正是我想要的),我需要将其用作其他代码中的进度条。
我使用print "*",
但是输出是水平的,但是在程序执行后它会立即打印出来。
>>>* * * * * done
使用end
关键字会出现此错误。
File "progress_1_.py", line 11
print ("*",end = '')
^
SyntaxError: invalid syntax
Python版本是Python 2.7.5。
我无法在此prod机器上升级Python,需要处理现有版本才能获得所需的输出。
因此,考虑到上述情况,不是以新行打印,而是以2秒的间隔一个接一个地水平打印?
答案 0 :(得分:3)
这是一个简单的答案:
#!/usr/bin/python
import sys
import time
def wait(n):
time_counter = 0
while True:
time_counter += 1
if time_counter <= n:
time.sleep(1)
sys.stdout.write("*")
sys.stdout.flush()
else:
break
sys.stdout.write("\n")
wait(10)
Output:
**********
您可以修改自己想要的方式。
答案 1 :(得分:2)
Python 2的print
语句不如Python 3中的函数灵活。
如果你使用Python 3,你可以简单地指定结束字符以及是否立即刷新缓冲区,如下所示:
print("*", end="", flush=True)
但是,当您使用Python 2时,您不能使用print
语句,但必须直接访问输出流对象:
import sys
def progress_print(character="*"):
sys.stdout.write(character)
sys.stdout.flush()
这会强制Python在一行完成之前不缓存打印数据,但会通过刷新缓冲区立即显示它。
答案 2 :(得分:2)
您可以使用python -u
或者当您需要使用python 2时,您也可以将sys.stdout
替换为其他流,例如在每次调用后都执行刷新的包装器。
class Unbuffered(object):
def __init__(self, stream):
self.stream = stream
def write(self, data):
self.stream.write(data)
self.stream.flush()
def __getattr__(self, attr):
return getattr(self.stream, attr)
import time
import sys
sys.stdout = Unbuffered(sys.stdout)
print '*',
time.sleep(2)
print '*'