RJ博客

python 输出缓存

本文目录

Linux Shell运行Python脚本,Python脚本while循环里print的内容无法实时写入磁盘log文件,这个其实就是和缓冲有关。

缓冲的目的:是为了减少系统的io调用。只有当符合一定条件(比如缓冲数量)时才调用io。当缓冲区大于0时(等于0时无缓冲,所有的读写操作都直接针对硬盘),Python会将文件内容存放到缓冲区(内存中),从而使程序运行更快,这时,只有使用flush或者 close才会将缓冲区中的数据更新到硬盘中。

以以下test.py代码为例:

import time
while True:
    print '111'
    time.sleep(1)

用shell运行后:

python test.py >> test.log

print内容不会实时输出到test.log文件中,而是要等内存中的缓冲区满了才会写到硬盘文件中。


缓冲分三种: 

全缓冲 : open函数的buffering设置大于1的整数n,n为缓冲区大小,linux默认为page的大小4096 满了n 个字节才会写入磁盘 。

行缓冲 : open 函数的buffering设置为1, 碰到换行就会将缓冲区的写入磁盘。

f=open("demo.txt", 'w', buffering=1)

无缓冲 : open 函数的buffering设置为0 有输入就写入磁盘。

f=open("demo.txt", 'w', buffering=0)


针对shell运行命令行的模式,最简单的解决办法是用python自带的-u参数,可以使得python不启用缓冲:

python -u test.py >> test.log 2>&1




Refer:

http://bbs.chinaunix.net/thread-4142532-1-1.html

http://blog.csdn.net/sunlylorn/article/details/19127107

http://blog.csdn.net/lujiandong1/article/details/49927385


相关推荐

发表评论