编写一个简单的python脚本test.py:
import time
print "begin"
time.sleep(10)
print "stop"
在bash中,运行
python test.py > log.txt
我观察到,“开始”和“停止”同时出现在log.txt中,10秒后。
这是预期的行为吗?
答案 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秒后),清空缓冲区,写入数据并关闭文件。