Я пытаюсь эмулировать эту команду оболочки в Python, используя библиотеки systemd http://www.freedesktop.org/software/systemd/python-systemd/journal.html
На самом деле я пытаюсь эмулировать эту команду, но в 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'])