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

0 投票
1 回答
676 浏览
提问于 2025-04-17 16:11

我想从一个无限的 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 是关键。

撰写回答