Ce face sys.audit() și sys.addaudithook()
Interpretorul și biblioteca standard emit evenimente de audit pentru operații sensibile: open, subprocess.Popen, socket.connect, exec, import etc. addaudithook(f) înregistrează o funcție f(eveniment, argumente) apelată pentru fiecare; funcțiile înregistrate nu mai pot fi scoase. Ridicarea unei excepții din funcție blochează operația.
sys.audit(nume, *args) emite propriile evenimente, astfel încât și codul tău să poată fi auditat.
Parametri
| Parametru | Descriere |
|---|---|
functie |
Funcția (eveniment, argumente). |
eveniment, *argumente |
Pentru audit: numele și datele evenimentului. |
Ce returnează
None.
Exemple
Exemplul 1: Jurnal de operații sensibile
import sys
def auditor(eveniment, argumente):
if eveniment == "open" and str(argumente[0]).endswith(".txt"):
print("[audit] deschidere:", argumente[0], argumente[1])
elif eveniment.startswith("magazin."):
print("[audit]", eveniment, argumente)
sys.addaudithook(auditor)
with open("nota.txt", "w") as f:
f.write("x")
sys.audit("magazin.plata", "Ana", 250)
Rezultat
[audit] deschidere: nota.txt w
[audit] magazin.plata ('Ana', 250)
Greșeli frecvente
- Faci operații lente sau afișezi tot în funcția de audit: este apelată pentru foarte multe evenimente interne. Filtrează devreme după nume.
Comenzi înrudite
sys.settrace(), setprofile() și call_tracing(): Funcții apelate de interpretor la fiecare apel sau rând de cod, baza depanatoarelor și profilerelor.open() și with: Deschide un fișier pentru citire sau scriere; cu with, fișierul este închis automat.