'Closely emulate the interactive Python console.
The optional banner argument specify the banner to print
before the first interaction; by default it prints a banner
similar to the one printed by the real Python interpreter,
followed by the current class name in parentheses (so as not
to confuse this with the real interpreter -- since it\'s so
close!).'

def interact(self, banner=None):

    try:
        sys.ps1
    except AttributeError:
        sys.ps1 = '>>>    '
    try:
        sys.ps2
    except AttributeError:
        sys.ps2 = '...    '
    cprt = 'Type    "help",    "copyright",    "credits"    or    "license"    for    more    information.'
    if (banner is None):
        self.write(('Python    %s    on    %s\n%s\n(%s)\n' % (sys.version, sys.platform, cprt, self.__class__.__name__)))
    else:
        self.write(('%s\n' % str(banner)))
    more = 0
    while 1:
        try:
            if more:
                prompt = sys.ps2
            else:
                prompt = sys.ps1
            try:
                line = self.raw_input(prompt)
                encoding = getattr(sys.stdin, 'encoding', None)
                if (encoding and (not isinstance(line, unicode))):
                    line = line.decode(encoding)
            except EOFError:
                self.write('\n')
                break
            else:
                more = self.push(line)
        except KeyboardInterrupt:
            self.write('\nKeyboardInterrupt\n')
            self.resetbuffer()
            more = 0
