python - 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'))
推荐阅读
- r - R - 从长到宽重塑时“变化 [,i] 中的错误:维度数不正确”
- database - 图数据库(OrientDB)中基于事件的时间序列数据
- vue.js - 为什么我不能在 VueJS/Vuex 中调用命名空间的 getter?
- php - 如果 (in_array) 似乎没有看到数组中的内容,我做错了什么?
- python - Python列表逆序排序
- django - Django include 语句的行为很奇怪
- javascript - IONIC FRAMEWORK "TypeError: Object(...) is not a function"
- javascript - 将 'hover()' 更改为 'on("vmouseover")',破坏脚本并输出 'undefined'
- javascript - 单选按钮输入不会将值传递给模态
- javascript - 当我通过内联函数调用将对象返回到 ES6/Reactjs 中的另一个对象时出错