Add Jeff Epler's interact() function. Note that it is broken.
(It should probably be withdrawn :-( )
This commit is contained in:
parent
d5484fb75c
commit
90981e0e70
52
Lib/code.py
52
Lib/code.py
|
@ -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()
|
||||
|
|
Loading…
Reference in New Issue