Python之缓存刷新

Python之缓存刷新

有些童鞋写了python脚本在linux执行,发现pingt打印的内容并不是预想的一样直接输出,不能实时获取python脚本输出日志,而是在脚本执行完成后才输出,这是啥子原因呢?

其实这是python缓冲区的问题

在我们调用print后,并不是立即就打印的,一般会先将内容发送到缓冲区,然后再打印,如果缓冲区没满,不会打印,如果你想立即看到,就需要刷新缓冲区

主动调用刷新是最安全方式,对于耗时比较长的python脚本,可以实时获取日志信息

案例1

import sys
import time

for i in range(10):
	print(i)
	time.sleep(1)

该实验会每隔一秒打印一个数字,输出会自动的刷新缓存,因为print默认时以‘\n’结尾,遇到换行就会显示出来

案例2

import sys
import time

for i in range(10):
    print(i, end =' ')
    time.sleep(1)

该实验在前9秒不会打印数据,只会在第10秒的时候把之前的数据一并打印出来,因为用空格作为print的分隔符,不会触发缓存刷新

案例3

import sys
import time

for i in range(10):
    print(i, end =' ')
    sys.stdout.flush()
    time.sleep(1)

该输出就会每隔一秒打印一个数字,因为代码主动刷新了缓存

案例4

import sys
import time

for i in range(10):
    print(i, end =' ', flush = True)
    time.sleep(1)

当然了print本身也提供了flush参数,通过设置也可以主动刷新

案例5

可以在调用python脚本时,添加==-u==参数,会强制其标准输出也同业标准错误一样,不通过缓存直接打印到屏幕

小记录:在有的python版本中加不加-u参数好像都是一样的,不起作用,具体没搞太明白,不知道是否是版本存在问题

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值