Python轮询文件描述符未返回最后一行



我希望能够从journalctl命令中读取并跟踪日志,以便进行日志监视。有一种奇怪的行为,它没有显示日志的最后一行。我不明白发生了什么,如果能深入了解如何解决这个问题,我将不胜感激。

这是我当前的代码:

import sys
import subprocess
import select

args = ['journalctl', '-u', 'foo.service', '--follow']
f = subprocess.Popen(args, stdout=subprocess.PIPE)
p = select.poll()
p.register(f.stdout)
while True:
if p.poll(1):
line = f.stdout.readline()
if line:
print(line.strip())

请注意,如果我再次执行f.stdout.readline(),它确实会吐出最后一行。

感谢好心人的帮助!

这与轮询文件有关,但我发现不使用它也不会造成任何问题。

这似乎也能很好地完成工作。

import sys
import subprocess

args = ['journalctl', '-u', 'foo.service', '--follow']
f = subprocess.Popen(args, stdout=subprocess.PIPE)
while True:
line = f.stdout.readline()
if line:
print(line.strip().decode('utf-8'))

最新更新