import code import StringIO oraw_input = raw_input class Tee(object): __buffer = StringIO.StringIO() @classmethod def raw_input(cls, *a, **kw): result = oraw_input(*a, **kw) print >>cls.__buffer, result return result def __init__(self, fil_): self.fil_ = fil_ def __getattr__(self, name): return getattr(self.fil_, name) def read(self, *a): result = self.fil_.read(*a) print 'hello!!!' print >>sys.stdout.fil_, result self.__buffer.write(result) return result def write(self, data): self.__buffer.write(data) self.fil_.write(data) def flush(self): self.__buffer.flush() self.fil_.flush() def get_data(self): self.__buffer.seek(0,0) return self.__buffer.read() __builtins__.raw_input = Tee.raw_input import sys stdin = sys.stdin = Tee(sys.stdin) stdout = sys.stdout = Tee(sys.stdout) stderr = sys.stderr = Tee(sys.stderr) try: a = code.InteractiveConsole() a.interact() except BaseException: sys.stderr = sys.stderr.fil_ raise else: sys.stderr = sys.stderr.fil_ finally: sys.stdin = sys.stdin.fil_ sys.stdout = sys.stdout.fil_ __builtins__.raw_input = oraw_input data = stdin.get_data().split('\n') out = [] counter = 0 for line in data: if line.startswith('>>> ') or line.startswith('... '): line = line.split(' ', 1)[-1] counter += 1 line = 'l%s = %s' % (counter, line) else: line = 'repr(l%s) == """%s"""' % (counter, line) out.append(line) print '\n'.join(out) exec '\n'.join(out)