diff Lib/idlelib/ScriptBinding.py @ 32484:f3cb95cd413f legacy-trunk

Redirect the warning stream to the shell during the ScriptBinding check of user code and format the warning similarly to an exception for both that check and for warnings raised in the subprocess. M NEWS.txt M Pyshell.py M ScriptBinding.py M run.py
author Kurt B. Kaiser <kbk@shore.net>
date Sun, 04 Jul 2004 01:25:56 +0000
parents 71a294bd7950
children 3973d63d2667 cd6b54ba272f
line wrap: on
line diff
--- a/Lib/idlelib/ScriptBinding.py	Sat Jul 03 13:48:56 2004 +0000
+++ b/Lib/idlelib/ScriptBinding.py	Sun Jul 04 01:25:56 2004 +0000
@@ -82,6 +82,9 @@
         return True
 
     def checksyntax(self, filename):
+        self.shell = shell = self.flist.open_shell()
+        saved_stream = shell.get_warning_stream()
+        shell.set_warning_stream(shell.stderr)
         f = open(filename, 'r')
         source = f.read()
         f.close()
@@ -92,20 +95,23 @@
         text = self.editwin.text
         text.tag_remove("ERROR", "1.0", "end")
         try:
-            # If successful, return the compiled code
-            return compile(source, filename, "exec")
-        except (SyntaxError, OverflowError), err:
             try:
-                msg, (errorfilename, lineno, offset, line) = err
-                if not errorfilename:
-                    err.args = msg, (filename, lineno, offset, line)
-                    err.filename = filename
-                self.colorize_syntax_error(msg, lineno, offset)
-            except:
-                msg = "*** " + str(err)
-            self.errorbox("Syntax error",
-                          "There's an error in your program:\n" + msg)
-            return False
+                # If successful, return the compiled code
+                return compile(source, filename, "exec")
+            except (SyntaxError, OverflowError), err:
+                try:
+                    msg, (errorfilename, lineno, offset, line) = err
+                    if not errorfilename:
+                        err.args = msg, (filename, lineno, offset, line)
+                        err.filename = filename
+                    self.colorize_syntax_error(msg, lineno, offset)
+                except:
+                    msg = "*** " + str(err)
+                self.errorbox("Syntax error",
+                              "There's an error in your program:\n" + msg)
+                return False
+        finally:
+            shell.set_warning_stream(saved_stream)
 
     def colorize_syntax_error(self, msg, lineno, offset):
         text = self.editwin.text
@@ -135,10 +141,7 @@
         code = self.checksyntax(filename)
         if not code:
             return
-        flist = self.editwin.flist
-        shell = flist.open_shell()
-        if not shell:
-            return  # couldn't open the shell
+        shell = self.shell
         interp = shell.interp
         if PyShell.use_subprocess:
             shell.restart_shell()
@@ -156,6 +159,9 @@
             del _filename, _sys, _basename, _os
             \n""" % (filename, dirname))
         interp.prepend_syspath(filename)
+        # XXX KBK 03Jul04 When run w/o subprocess, runtime warnings still
+        #         go to __stderr__.  With subprocess, they go to the shell.
+        #         Need to change streams in PyShell.ModifiedInterpreter.
         interp.runcode(code)
 
     def getfilename(self):