使用python实现tee的效果

代码

tee是linux下的一个命令行工具,通过pipe可以将程序的输出同时输出到屏幕和文件。
python下也可以实现这样的效果,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import sys

class Tee(object):
def __init__(self, name, mode):
self.file = open(name, mode)
self.stdout = sys.stdout
sys.stdout = self

def __del__(self):
sys.stdout = self.stdout
self.file.close()

def write(self, data):
self.file.write(data)
self.stdout.write(data)

def flush(self):
self.file.flush()

Tee这个类在初始化方法里接管了标准输出,此后程序中所有的print都会输出到文件。

例子

1
2
3
4
5
6
7
8
9
from Tee import Tee

if __name__ == '__main__':
logger = Tee('log.txt', 'w')
A = [1,2,3,4,5,6,7,8,9,0]
B=A[::2]
print B
L=range(1,13)
print L,type(L)

‘log.txt’中的内容为

1
2
[1, 3, 5, 7, 9]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] <type 'list'>