Как мне автоматически разобрать синтаксис файла audit.log, который я открываю перед чтением реальных строк? - PullRequest
1 голос
/ 02 апреля 2019

Я пытаюсь автоматически разобрать файл журнала, который я сначала открываю в своей программе Python, чтобы его вывод был в удобочитаемом формате, прежде чем я начну читать фактические строки из самого файла.Как мне это сделать?

with open('/var/log/audit/audit.log') as audit_raw:
    audit_formatted=subprocess.call(["ausearch", "-i", audit_raw])
    line = audit_formatted.readline()

Сообщение об ошибке, когда я пытаюсь именно это:

Traceback (most recent call last):
  File "./email_script.py", line 29, in <module>
    audit_log=subprocess.call(["ausearch", "-i", audit_raw])
  File "/usr/lib/python3.6/subprocess.py", line 267, in call
    with Popen(*popenargs, **kwargs) as p:
  File "/usr/lib/python3.6/subprocess.py", line 709, in __init__
    restore_signals, start_new_session)
  File "/usr/lib/python3.6/subprocess.py", line 1275, in _execute_child
    restore_signals, start_new_session, preexec_fn)
TypeError: expected str, bytes or os.PathLike object, not _io.TextIOWrapper

1 Ответ

1 голос
/ 02 апреля 2019

Вы вызываете ausearch с правильными параметрами и анализируете его вывод.

Похищено здесь: Библиотека Python для обработки файла Auditlog журнала linux? (что является оффтопическим вопросом, требующим одобрения библиотеки) и может исчезнуть из SO - именно поэтому я решил не "дублировать".

обеликсз ответ :

import subprocess

def read_audit(before,now,user):
    auparam = " -sc EXECVE"
    cmd = "ausearch -ts " + before.strftime('%H:%M:%S') + " -te " + now.strftime('%H:%M:%S') + " -ua " + user + auparam
    p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE)
    res = p.stdout.read().decode()
    return res
...