From 30d5e6c13fc988af2a6c0f8f0cdf43092c241e8f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20v=2E=20L=C3=B6wis?= Date: Wed, 25 Jul 2012 11:32:26 +0200 Subject: [PATCH] Issue #7163: Propagate return value of sys.stdout.write. Patch by Roger Serwy. --- Lib/idlelib/NEWS.txt | 2 ++ Lib/idlelib/OutputWindow.py | 1 + Lib/idlelib/PyShell.py | 7 ++++--- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/Lib/idlelib/NEWS.txt b/Lib/idlelib/NEWS.txt index ed9e105949f..3a641a019eb 100644 --- a/Lib/idlelib/NEWS.txt +++ b/Lib/idlelib/NEWS.txt @@ -1,6 +1,8 @@ What's New in IDLE 3.2.4? ========================= +- Issue #7163: Propagate return value of sys.stdout.write. + - Issue #15318: Prevent writing to sys.stdin. - Issue #13532, #15319: Check that arguments to sys.stdout.write are strings. diff --git a/Lib/idlelib/OutputWindow.py b/Lib/idlelib/OutputWindow.py index 565cc9b772d..cba90139976 100644 --- a/Lib/idlelib/OutputWindow.py +++ b/Lib/idlelib/OutputWindow.py @@ -40,6 +40,7 @@ def write(self, s, tags=(), mark="insert"): self.text.insert(mark, s, tags) self.text.see(mark) self.text.update() + return len(s) def writelines(self, lines): for line in lines: diff --git a/Lib/idlelib/PyShell.py b/Lib/idlelib/PyShell.py index 83d40dff0bd..0eae7c5cee3 100644 --- a/Lib/idlelib/PyShell.py +++ b/Lib/idlelib/PyShell.py @@ -760,7 +760,7 @@ def runcode(self, code): def write(self, s): "Override base class method" - self.tkconsole.stderr.write(s) + return self.tkconsole.stderr.write(s) def display_port_binding_error(self): tkMessageBox.showerror( @@ -1229,7 +1229,7 @@ def resetoutput(self): def write(self, s, tags=()): try: self.text.mark_gravity("iomark", "right") - OutputWindow.write(self, s, tags, "iomark") + count = OutputWindow.write(self, s, tags, "iomark") self.text.mark_gravity("iomark", "left") except: raise ###pass # ### 11Aug07 KBK if we are expecting exceptions @@ -1238,6 +1238,7 @@ def write(self, s, tags=()): self.canceled = 0 if not use_subprocess: raise KeyboardInterrupt + return count class PseudoFile(object): @@ -1249,7 +1250,7 @@ def __init__(self, shell, tags, encoding=None): def write(self, s): if not isinstance(s, str): raise TypeError('must be str, not ' + type(s).__name__) - self.shell.write(s, self.tags) + return self.shell.write(s, self.tags) def writelines(self, lines): for line in lines: