subprocess module

class WinConsole(Console):
    TYPE = 'term'
 
    def __init__(self, name, cwd=None, stream=sys.stdout):
        Console.__init__(self, name, stream)
        self.cwd=cwd
 
    def open(self):
 
        self.term = subprocess.Popen('cmd.exe',
                               shell=False,
                               stdin=subprocess.PIPE, 
                               stdout=subprocess.PIPE,
                               universal_newlines=True,
                               cwd=self.cwd)
 
        self.q = Queue()
        self.t = threading.Thread(target=enqueue_output, args=(self.term.stdout,
                                                               self.q))
        self.t.daemon = True # thread dies with the program
        self.t.start()
 
    def close(self):
        self.t = None
        self.q = None
        self.term.terminate()
        self.term = None
 
    def readchar(self, timeout):
        c = '';
        try:
            c = self.q.get(timeout=timeout)
        except:
            pass
        return c
 
    def write(self, str):
        res = self.term.stdin.write(str)
        self.term.stdin.flush()
        return res