Write A Interactive Python Shell
import sys
import code
from code import InteractiveConsole
 
class FileCacher:
    "Cache the stdout text so we can analyze it before returning it"
    def __init__(self): self.reset()
    def reset(self): self.out = []
    def write(self,line): self.out.append(line)
    def flush(self):
        output = ''.join(self.out)
        self.reset()
        return output
 
class Shell(InteractiveConsole):
    "Wrapper around Python that can filter input/output to the shell"
    def __init__(self):
        self.stdout = sys.stdout
        self.cache = FileCacher()
        InteractiveConsole.__init__(self)
        return
 
    def get_output(self):
        sys.stdout = self.cache
 
    def return_output(self):
        sys.stdout = self.stdout
 
    def push(self,line):
        self.get_output()
        # you can filter input here by doing something like
        # line = filter(line)
        InteractiveConsole.push(self,line)
        self.return_output()
        output = self.cache.flush()
        # you can filter the output here by doing something like
        # output = filter(output)
        sys.stdout.write(output) # or do something else with it
        return 
 
if __name__ == '__main__':
     sh = Shell()
     sh.interact()

Reference:
http://docs.python.org/2/library/code.html