diff options
author | Terry Jan Reedy <tjreedy@udel.edu> | 2013-06-29 03:52:05 (GMT) |
---|---|---|
committer | Terry Jan Reedy <tjreedy@udel.edu> | 2013-06-29 03:52:05 (GMT) |
commit | a92bfa457cd35443c340fa9931055899bab2b618 (patch) | |
tree | 2512d7d10d62d473dd8a4fc171f3a68f06290bbb /Lib/idlelib/run.py | |
parent | 912bad7cd7e2c21ffde9013a2deba02cf772dbdc (diff) | |
parent | 95a3f11f95f0f1a3c35b431f9ea745cc9340a07c (diff) | |
download | cpython-a92bfa457cd35443c340fa9931055899bab2b618.zip cpython-a92bfa457cd35443c340fa9931055899bab2b618.tar.gz cpython-a92bfa457cd35443c340fa9931055899bab2b618.tar.bz2 |
Merge with 3.3
Diffstat (limited to 'Lib/idlelib/run.py')
-rw-r--r-- | Lib/idlelib/run.py | 56 |
1 files changed, 36 insertions, 20 deletions
diff --git a/Lib/idlelib/run.py b/Lib/idlelib/run.py index 15f4472..13cec62 100644 --- a/Lib/idlelib/run.py +++ b/Lib/idlelib/run.py @@ -23,28 +23,39 @@ import __main__ LOCALHOST = '127.0.0.1' -try: - import warnings -except ImportError: - pass -else: - def idle_formatwarning_subproc(message, category, filename, lineno, - line=None): - """Format warnings the IDLE way""" - s = "\nWarning (from warnings module):\n" - s += ' File \"%s\", line %s\n' % (filename, lineno) - if line is None: - line = linecache.getline(filename, lineno) - line = line.strip() - if line: - s += " %s\n" % line - s += "%s: %s\n" % (category.__name__, message) - return s - warnings.formatwarning = idle_formatwarning_subproc +import warnings +def idle_showwarning_subproc( + message, category, filename, lineno, file=None, line=None): + """Show Idle-format warning after replacing warnings.showwarning. -tcl = tkinter.Tcl() + The only difference is the formatter called. + """ + if file is None: + file = sys.stderr + try: + file.write(PyShell.idle_formatwarning( + message, category, filename, lineno, line)) + except IOError: + pass # the file (probably stderr) is invalid - this warning gets lost. +_warnings_showwarning = None + +def capture_warnings(capture): + "Replace warning.showwarning with idle_showwarning_subproc, or reverse." + + global _warnings_showwarning + if capture: + if _warnings_showwarning is None: + _warnings_showwarning = warnings.showwarning + warnings.showwarning = idle_showwarning_subproc + else: + if _warnings_showwarning is not None: + warnings.showwarning = _warnings_showwarning + _warnings_showwarning = None + +capture_warnings(True) +tcl = tkinter.Tcl() def handle_tk_events(tcl=tcl): """Process any tk events that are ready to be dispatched if tkinter @@ -52,7 +63,6 @@ def handle_tk_events(tcl=tcl): loaded.""" tcl.eval("update") - # Thread shared globals: Establish a queue between a subthread (which handles # the socket) and the main thread (which runs user code), plus global # completion, exit and interruptable (the main thread) flags: @@ -91,6 +101,8 @@ def main(del_exitfunc=False): print("IDLE Subprocess: no IP port passed in sys.argv.", file=sys.__stderr__) return + + capture_warnings(True) sys.argv[:] = [""] sockthread = threading.Thread(target=manage_socket, name='SockThread', @@ -118,6 +130,7 @@ def main(del_exitfunc=False): exit_now = True continue except SystemExit: + capture_warnings(False) raise except: type, value, tb = sys.exc_info() @@ -247,6 +260,7 @@ def exit(): if no_exitfunc: import atexit atexit._clear() + capture_warnings(False) sys.exit(0) class MyRPCServer(rpc.RPCServer): @@ -386,3 +400,5 @@ class Executive(object): sys.last_value = val item = StackViewer.StackTreeItem(flist, tb) return RemoteObjectBrowser.remote_object_tree_item(item) + +capture_warnings(False) # Make sure turned off; see issue 18081 |