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参数好像都是一样的,不起作用,具体没搞太明白,不知道是否是版本存在问题

你可能感兴趣的:(Python,python,缓存)