import re import os import atexit import shutil import subprocess import __builtin__ from cStringIO import StringIO FILES = [] _fdopen = os.fdopen _oopen = os.open _open = __builtin__.open def write_files(): os.open = _oopen os.fdopen = _fdopen __builtin__.open = _open for file in FILES: if not file._safe_name(): continue _open(file._safe_name(), 'w').write(file.buffer.getvalue()) atexit.register(write_files) class FakeOpenFile: def __init__(self, name=None): self.name = name self.buffer = StringIO() FILES.append(self) def _safe_name(self): name = self.name if hasattr(self.name, 'name'): name = self.name.name if isinstance(name, int): return None return str(name).replace("/", "__") def readline(self): return "Ubuntu" def writelines(self, lines): self.buffer.write(lines) def write(self, lines): self.buffer.write(lines) def read(self): return "" def close(self): pass def __enter__(self): return self def __exit__(self, exc_type, exc_val, exc_tb): pass shutil.copyfile = lambda x, y: False def patched_call(*args, **kwargs): print "CALL: {!r} {!r}".format(args, kwargs) return 0 subprocess.call = patched_call os.geteuid = lambda: 0 def patched_system(*args, **kwargs): print "SYSTEM: {!r} {!r}".format(args, kwargs) os.system = patched_system _old_open = __builtin__.open def patched_open(name): def opener(*args, **kwargs): if args[0] == os.devnull: return _old_open(os.devnull) print "{}: {!r} {!r}".format(name, args, kwargs) return FakeOpenFile(args[0]) return opener os.open = patched_open("OS.OPEN") os.fdopen = patched_open("OS.FDOPEN") __builtin__.open = patched_open("OPEN") def patched_mkdir(*args, **kwargs): print "MKDIR: {!r} {!r}".format(args, kwargs) os.mkdir = patched_mkdir def patched_raw_input(prompt): print prompt value = re.findall('\[([^\]]+)\]', prompt)[0] return value if value != 'Y' else 'n' __builtin__.raw_input = patched_raw_input