Python之缓存刷新

本文遵循BY-SA版权协议,转载请附上原文出处链接。


本文作者: 黑伴白

本文链接: http://heibanbai.com.cn/posts/9b13e994/

Python之缓存刷新

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

其实这是python缓冲区的问题

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

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

案例1

1
2
3
4
5
6
import sys
import time

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

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

案例2

1
2
3
4
5
6
import sys
import time

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

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

案例3

1
2
3
4
5
6
7
import sys
import time

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

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

案例4

1
2
3
4
5
6
import sys
import time

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

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

案例5

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

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


蚂蚁再小也是肉🥩!


Python之缓存刷新
http://heibanbai.com.cn/posts/9b13e994/
作者
黑伴白
发布于
2021年11月26日
许可协议

“您的支持,我的动力!觉得不错的话,给点打赏吧 ୧(๑•̀⌄•́๑)૭”

微信二维码

微信支付

支付宝二维码

支付宝支付