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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • feisky云计算、虚拟化与Linux技术笔记posts - 1014, comments - 298, trac...
    不排版阅读 9,322评论 0 5
  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 9,938评论 0 5
  • http://python.jobbole.com/85231/ 关于专业技能写完项目接着写写一名3年工作经验的J...
    燕京博士阅读 12,219评论 1 118
  • 字符集和编码简介 在编程中常常可以见到各种字符集和编码,包括ASCII,MBCS,Unicode等字符集。确切的说...
    兰山小亭阅读 12,793评论 0 13
  • 人生一场梦,但是梦里也要有自己的追求和梦想。 我是一个农村人,上学的时候没好好学习,我现在好后...
    情赏阅读 1,033评论 0 1