From 90981e0e70450bfb58f0d83d4e4d00a4a7d4d5d9 Mon Sep 17 00:00:00 2001 From: Guido van Rossum Date: Tue, 7 Oct 1997 14:47:24 +0000 Subject: Add Jeff Epler's interact() function. Note that it is broken. (It should probably be withdrawn :-( ) --- Lib/code.py | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/Lib/code.py b/Lib/code.py index 49fe541..e01051e 100644 --- a/Lib/code.py +++ b/Lib/code.py @@ -1,3 +1,5 @@ +# XXX This is broken with class exceptions + """Utilities dealing with code objects.""" def compile_command(source, filename="", symbol="single"): @@ -50,3 +52,53 @@ def compile_command(source, filename="", symbol="single"): return code if not code1 and err1 == err2: raise SyntaxError, err1 + + +def interact(banner=None, readfunc=raw_input, local=None): + # Due to Jeff Epler, with changes by Guido: + """Closely emulate the interactive Python console.""" + try: import readline # Enable GNU readline if available + except: pass + local = local or {} + import sys, string, traceback + sys.ps1 = '>>> ' + sys.ps2 = '... ' + if banner: + print banner + else: + print "Python Interactive Console", sys.version + print sys.copyright + buf = [] + while 1: + if buf: prompt = sys.ps2 + else: prompt = sys.ps1 + try: line = readfunc(prompt) + except KeyboardInterrupt: + print "\nKeyboardInterrupt" + buf = [] + continue + except EOFError: break + buf.append(line) + try: x = compile_command(string.join(buf, "\n")) + except SyntaxError: + traceback.print_exc(0) + buf = [] + continue + if x == None: continue + else: + try: exec x in local + except: + exc_type, exc_value, exc_traceback = \ + sys.exc_type, sys.exc_value, \ + sys.exc_traceback + l = len(traceback.extract_tb(sys.exc_traceback)) + try: 1/0 + except: + m = len(traceback.extract_tb( + sys.exc_traceback)) + traceback.print_exception(exc_type, + exc_value, exc_traceback, l-m) + buf = [] + +if __name__ == '__main__': + interact() -- cgit v0.12