#!/bin/env python3 import sys def auditor(builtins): _str = builtins['str'] # site.exit is a mutable Quitter instance, so keep the hook state immutable. _system_exit = builtins['SystemExit'] blacklist_patterns = ('process', 'os', 'sys', 'interpreter', 'cpython', 'compile', 'open', '__new__', 'gc') def func(event, args): event_args_str = _str(event) + "".join(_str(s) for s in args) for pattern in blacklist_patterns: if pattern in event_args_str: raise _system_exit(1) return func codes = input('$ ') code = compile(codes, "", "exec") sys.addaudithook(auditor(__builtins__.__dict__.copy())) exec(code,{'__builtins__':{}},{})