diff -r d7ae8a84f443 Lib/idlelib/PyShell.py --- a/Lib/idlelib/PyShell.py Wed Jun 26 15:11:12 2013 -0400 +++ b/Lib/idlelib/PyShell.py Wed Jun 26 20:52:19 2013 -0400 @@ -45,35 +45,32 @@ # internal warnings to the console. ScriptBinding.check_syntax() will # temporarily redirect the stream to the shell window to display warnings when # checking user's code. -global warning_stream -warning_stream = sys.__stderr__ -try: - import warnings -except ImportError: - pass -else: - def idle_showwarning(message, category, filename, lineno, - file=None, line=None): - if file is None: - file = warning_stream - try: - file.write(warnings.formatwarning(message, category, filename, - lineno, line=line)) - except OSError: - pass ## file (probably __stderr__) is invalid, warning dropped. - warnings.showwarning = idle_showwarning - def idle_formatwarning(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 + +warning_stream = sys.__stderr__ # None, at least on Windows, if no console. +import warnings + +def idle_formatwarning(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 + +def idle_showwarning( + message, category, filename, lineno, file=None, line=None): + """Replacement for warnings.showwarnings, in main()""" + if file is None: + file = warning_stream + try: + file.write(idle_formatwarning( + message, category, filename, lineno, line=line)) + except AttributeError, OSError: + pass # if file (probably __stderr__) is invalid, skip warning. def extended_linecache_checkcache(filename=None, orig_checkcache=linecache.checkcache): @@ -1421,6 +1418,7 @@ def main(): global flist, root, use_subprocess + warnings.showwarning = idle_showwarning use_subprocess = True enable_shell = False enable_edit = False diff -r d7ae8a84f443 Lib/idlelib/run.py --- a/Lib/idlelib/run.py Wed Jun 26 15:11:12 2013 -0400 +++ b/Lib/idlelib/run.py Wed Jun 26 20:52:19 2013 -0400 @@ -23,29 +23,33 @@ 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_formatwarning_subproc(message, category, filename, lineno, line=None): + """Format warnings the IDLE way for the user subprocess""" + 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 + +def idle_showwarning_subproc( + message, category, filename, lineno, file=None, line=None): + """Replaces warnings.showwarning in main.""" + if file is None: + file = sys.stderr + try: + file.write(idle_formatwarning_subproc( + message, category, filename, lineno, line)) + except IOError: + pass # the file (probably stderr) is invalid - this warning gets lost. tcl = tkinter.Tcl() - def handle_tk_events(tcl=tcl): """Process any tk events that are ready to be dispatched if tkinter has been imported, a tcl interpreter has been created and tk has been @@ -91,6 +95,9 @@ print("IDLE Subprocess: no IP port passed in sys.argv.", file=sys.__stderr__) return + + warnings.showwarning = idle_showwarning_subproc + sys.argv[:] = [""] sockthread = threading.Thread(target=manage_socket, name='SockThread',