我正在尝试使用 systemd 库 http://www.freedesktop.org/software/systemd/python-systemd/journal.html在 Python 中模拟这个 shell 命令
我实际上是在尝试在 Python 中模拟这个命令。
journalctl --since=-5m --no-pager
我已经看到其他人在 Python 中通过调用日志可执行文件来执行此操作,但这是一种非常糟糕的方法。
我根据上面链接的文档编写了这个简单的脚本
import select
from systemd import journal
j = journal.Reader()
j.log_level(journal.LOG_INFO)
# j.add_match(_SYSTEMD_UNIT="systemd-udevd.service")
j.seek_tail()
j.get_next()
while j.get_next():
for entry in j:
if entry['MESSAGE'] != "":
print(str(entry['__REALTIME_TIMESTAMP'] )+ ' ' + entry['MESSAGE'])
这里有几个问题
- 日志似乎从大约 5 天前开始,这意味着 seek_tail 似乎没有工作。
- 我在这里收到了很多垃圾,我应该使用一个特定的过滤器来匹配我从问题开头给出的 journalctl 命令中获得的数据吗?
理想情况下,从长远来看,我只想根据一组过滤器/匹配来关注该期刊,以模拟命令“journalctl -f”,但我只需要先解决这个问题。我想结束这样的事情,但它也不起作用。
import select
from systemd import journal
j = journal.Reader()
j.log_level(journal.LOG_INFO)
# j.add_match(_SYSTEMD_UNIT="systemd-udevd.service")
j.seek_tail()
p = select.poll()
p.register(j, j.get_events())
while p.poll():
while j.get_next():
for entry in j:
if entry['MESSAGE'] != "":
print(str(entry['__REALTIME_TIMESTAMP'] )+ ' ' + entry['MESSAGE'])