首页 > 解决方案 > 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()一次,它会吐出最后一行。

感谢您的帮助善良的人!

标签: pythonlinuxoperating-systemsubprocessfile-descriptor

解决方案


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

这似乎也可以完成工作。

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'))

推荐阅读