如何从无限的Popen.stdout对象获取最后N行?
我想从一个无限的 Popen.stdout 对象中获取最后 N 行内容。这里的“无限”是指有很多日志条目不断写入到标准输出中。我尝试过用 Popen.stdout.readline() 来限制时间,但这样做会出现很多随机的问题,尤其是在输出很少的时候。能有一个当前输出的快照会对我有帮助,但我找不到这样的东西。我找到的解决方案大多数都是针对那些会结束的外部进程,而我的情况是一个服务器应用,它在我读取最后几行后仍然可以继续写入标准输出。
问候,
Faerbit
1 个回答
0
在Unix系统中,当你启动一个程序时,可以先把它的输出通过管道传给 tail
命令:
p=subprocess.Popen("your_process.sh | tail --lines=3", stdout=subprocess.PIPE, shell=True)
r=p.communicate()
print r[0]
这里使用 shell=True
是关键。