Python 3.8+sysфункция
sys.addaudithook()
аудит
Добавляет функцию-хук, которую интерпретатор вызывает на каждом событии аудита: открытие файла, импорт, запуск процесса, вызов sys.audit().
Синтаксис
sys.addaudithook(hook) # hook(event: str, args: tuple)
Снять хук нельзя: он живёт до конца процесса, и функции remove нет намеренно. Хук вызывается очень часто (каждый open, import, compile), поэтому сразу отсеивайте лишние события по имени и не делайте в нём медленной работы. Исключение из хука отменяет само действие — так можно запретить open, но это не песочница: код, которому не доверяете, обходит аудит через ctypes и другие лазейки.
Примеры
import sys
def hook(event, args):
if event.startswith('myapp.'):
print('аудит:', event, args)
sys.addaudithook(hook)
sys.audit('myapp.login', 'alice') # → аудит: myapp.login ('alice',)
import sys
def guard(event, args):
if event == 'open' and str(args[0]).endswith('.secret'):
raise PermissionError('запрещено аудитом')
sys.addaudithook(guard)
try:
open('x.secret', 'w')
except PermissionError as e:
print(e) # → запрещено аудитом
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности