Add Jeff Epler's interact() function. Note that it is broken.

(It should probably be withdrawn :-( )
This commit is contained in:
Guido van Rossum 1997-10-07 14:47:24 +00:00
parent d5484fb75c
commit 90981e0e70
1 changed files with 52 additions and 0 deletions

View File

@ -1,3 +1,5 @@
# XXX This is broken with class exceptions
"""Utilities dealing with code objects."""
def compile_command(source, filename="<input>", symbol="single"):
@ -50,3 +52,53 @@ def compile_command(source, filename="<input>", 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()