python stdout to file没有实时响应

时间:2015-03-21 00:54:08

标签: python bash redirect io pipe

编写一个简单的python脚本test.py:

  import time
  print "begin"
  time.sleep(10)
  print "stop"

在bash中,运行

python test.py > log.txt

我观察到,“开始”和“停止”同时出现在log.txt中,10秒后。

这是预期的行为吗?

3 个答案:

答案 0 :(得分:3)

打印后需要刷新缓冲区。

import sys
import time

print "begin"
sys.stdout.flush()

time.sleep(10)

print "end"
sys.stdout.flush()

或者在Python 3中:

# This can also be done in Python 2.6+ with
# from __future__ import print_function

import time

print("begin", flush=True)
time.sleep(10)
print("end", flush=True)

答案 1 :(得分:3)

您是否尝试使用-u选项调用python,其中"强制stdin,stdout和stderr完全无缓冲" =>

python -u test.py > log.txt

答案 2 :(得分:2)

这是因为实际写入仅在缓冲区已满或文件关闭时才会发生。程序结束时(10秒后),清空缓冲区,写入数据并关闭文件。