引言
在公司的大促活动中写了一段python脚本,在执行过程中发现一个问题,就是使用tail -f ***.log
并不能实时刷新,这样就完全不知道脚本的执行情况了。观察了一下,发现log文件中过一段时间终于出现数据,于是推断这是因为缓冲区的原因。
举个例子,如下一段脚本,
import time
n = 0
for i in range(10000000000):
n += 1
print(n)
time.sleep(0.1)
执行命令,
python3 test.py > log &
tail -f log
可以发现log中迟迟没有结果,但是很显然我们是print的,这就是缓冲区未刷新的原因了。
解决方案
方法一
我们可以使用sys模块中的sys.stdout.flush()函数来强制刷新缓冲区
import sys
import time
n = 0
for i in range(10000000000):
n += 1
print(n)
sys.stdout.flush()
time.sleep(0.1)
方法二
在python执行命令中添加-u参数
python3 -u test.py