【sys.stdout.flush()】
当在某些平台上调度python脚本时,发现print出来的内容并不会实时显示。其原因是print函数会将所打印的内容会先送到缓冲区,等待缓冲区满了之后才会一次性输出。因此我们可以调用sys.stdout.flush()函数来强制刷新缓冲区,例子如下:
import time
import sys
# 每秒会输出一个数字
for i in range(5):
print i,
sys.stdout.flush()
time.sleep(1)
# 可能5秒后才一次性输出1 2 3 4 5
for i in range(5):
print i,
#sys.stdout.flush()
time.sleep(1)
【python -u】
对于以下例子,期待的输出结果是ab,但实际输出结果却是ba
import sys
sys.stdout.write("a")
sys.stderr.write("b")
原因是stdout是需要缓存的,当缓存区满了,或遇到换行符时才会进行输出,而stderr无缓存。调用sys.stdout.flush()可以让结果变成ab。更方便的方法是在调用脚本时增加 -u 参数,例如对于脚本demo.py,调用方式为python -u demo.py,这样就能使得stdout也变成无缓存的,直接向屏幕打印。