1、概念
将一个 generator
作为下一个generator
的输入,在第二个generator
利用第一个generator
输出进行计算,再输出结果
- 模型
输入序列 ---> generator_1 ----> generator_2 ----> for x in generator_2
2、实例
实现 shell
命令: tail -f 文件名 | grep '查询串'
import sys
import time
def tail(f):
f.seek(0, 2)
while True:
l = f.readline()
if l:
yield l
else:
time.sleep(0.1)
def grep(p, lines):
for l in lines:
if p in l:
yield l
if __name__ == '__main__':
logfile = open(sys.argv[1])
pattern = sys.argv[2]
# 第一个 generator: tail
log_lines = tail(logfile)
# 第二个 generator: grep,
# 其中grep以tail的输出结果进行计算
grep_lines = grep(pattern, log_lines)
# 循环最后一个生成器输出结果
for line in grep_lines:
print(line)