python-systemd
systemd
имеет официальные привязки Python , которые обычно можно установить через менеджер пакетов, например,
$ dnf install python3-systemd
для Fedora или
$ apt install python3-systemd
для Debian и производных. Если в virtualenv, вы можете установить непосредственно из Git-репо с pip
:
$ pip install git+https://github.com/systemd/python-systemd
python-systemd
имеет понятный и понятный API; Вот пример сценария, который выбирает записи журнала, зарегистрированные для sshd.service
за последние 24 часа, имитируя journalctl
формат по умолчанию:
import datetime
import systemd.journal
if __name__ == '__main__':
date_last_24h = datetime.datetime.now() - datetime.timedelta(hours=24)
reader = systemd.journal.Reader()
reader.seek_realtime(date_last_24h.timestamp())
reader.log_level(systemd.journal.LOG_INFO)
reader.add_match(_SYSTEMD_UNIT='sshd.service')
for entry in reader:
print(
'{} {} {}: {}'.format(
entry['__REALTIME_TIMESTAMP'].strftime('%B %d %H:%M:%S'),
entry['_HOSTNAME'],
entry['_SELINUX_CONTEXT'],
entry['MESSAGE'],
)
)
Запрос журнала только с помощью stdlib (subprocess
)
Если вам не разрешено устанавливать python-systemd
, прибегните к вызову journalctl
с соответствующими аргументами запроса:
import subprocess
import shlex
if __name__ == '__main__':
result = subprocess.run(shlex.split('journalctl -u systemd-udevd --since today'))
raw_output = result.stdout
print(raw_output)
Однако вы несете ответственность за разбиение вывода на строки и анализ соответствующей информации для каждой записи, что может быстро оказаться более громоздким, чем использование привязок.