Mercurial > cpython-lru_cache-weakref
diff Lib/code.py @ 6423:644484e1a37b legacy-trunk
Add Jeff Epler's interact() function. Note that it is broken.
(It should probably be withdrawn :-( )
| author | Guido van Rossum <guido@python.org> |
|---|---|
| date | Tue, 07 Oct 1997 14:47:24 +0000 |
| parents | b9063f6f811c |
| children | 00a85ab0337f |
line wrap: on
line diff
--- a/Lib/code.py Tue Oct 07 14:45:49 1997 +0000 +++ b/Lib/code.py Tue Oct 07 14:47:24 1997 +0000 @@ -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 @@ 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()
