文件I/O的三种缓冲方式:
全缓冲:直到缓冲区被填满,才调用系统I/O函数(一般是针对文件)
行缓冲:遇到换行符就输出(标准输出)
无缓冲:没有缓冲区,数据会立即读入或者输出到外存文件和设备上(标准错误)
经过试验发现,python的标准输出转换到管道是全缓冲,shell是无缓冲
示例:
1.python脚本:
]# cat guandao.py
#!/usr/bin/env python
import time
import sys
print '1111'
time.sleep(3)
print '2222'
time.sleep(3)
执行: python guandao.py |cat ,发现一次全部显示,说明是全缓冲
2.shell脚本
]# cat guandaosh.sh
#!/bin/bash
echo '1111'
sleep 3
echo '2222'&&sleep 2;echo '3333' ///这里是区分行缓冲和无缓冲的关键
echo '4444'
sleep 3
执行: sh guandaosh.sh |cat , 发现2222显示完后再显示3333,因此与换行无关,如果换行应该是2222和3333一起显示,因此是无缓冲