mirror of
https://github.com/python/cpython.git
synced 2025-08-04 00:48:58 +00:00
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
This commit is contained in:
parent
9ec3e3b6eb
commit
49a5fe107f
4 changed files with 72 additions and 20 deletions
|
@ -82,6 +82,9 @@ class ScriptBinding:
|
|||
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 @@ class ScriptBinding:
|
|||
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 @@ class ScriptBinding:
|
|||
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 @@ class ScriptBinding:
|
|||
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):
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue