如何从无限制的Popen.stdout对象中获取最后N行

时间:2013-02-17 18:10:39

标签: python popen lines

我正试图从当前时间的无限制Popen.stdout对象中获取最后N行。并且无限制地我指的是无限/许多日志条目被写入stdout。 我试过Popen.stdout.readline()受时间的限制,但这只会产生很多随机问题,特别是输出很少。 某种当前输出的快照会对我有所帮助,但我无法找到类似的东西。我主要找到的所有解决方案都是针对终止的外部进程,但我的是一个服务器应用程序,应该能够在读完最后一行后写入stdout。

问候,

Faerbit

1 个答案:

答案 0 :(得分: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是关键。