python刷新缓冲区

引言

在公司的大促活动中写了一段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

你可能感兴趣的:(python刷新缓冲区)