Issue #15318: Prevent writing to sys.stdin.
Patch by Roger Serwy and myself.
diff --git a/Lib/idlelib/run.py b/Lib/idlelib/run.py
index e1e6380..8e90370 100644
--- a/Lib/idlelib/run.py
+++ b/Lib/idlelib/run.py
@@ -260,7 +260,7 @@
 
     def __getattribute__(self, name):
         # When accessing the 'rpc' attribute, or 'write', use ours
-        if name in ('rpc', 'write'):
+        if name in ('rpc', 'write', 'writelines'):
             return io.TextIOBase.__getattribute__(self, name)
         # Else only look into the remote object only
         return getattr(self.rpc, name)
@@ -268,20 +268,35 @@
     def __setattr__(self, name, value):
         return setattr(self.rpc, name, value)
 
+    @staticmethod
+    def _ensure_string(func):
+        def f(self, s):
+            if not isinstance(s, basestring):
+                raise TypeError('must be str, not ' + type(s).__name__)
+            return func(self, s)
+        return f
+
+class _RPCOutputFile(_RPCFile):
+    @_RPCFile._ensure_string
     def write(self, s):
-        if not isinstance(s, (basestring, bytearray)):
-            raise TypeError('must be string, not ' + type(s).__name__)
         return self.rpc.write(s)
 
+class _RPCInputFile(_RPCFile):
+    @_RPCFile._ensure_string
+    def write(self, s):
+        raise io.UnsupportedOperation("not writable")
+    writelines = write
+
 class MyHandler(rpc.RPCHandler):
 
     def handle(self):
         """Override base method"""
         executive = Executive(self)
         self.register("exec", executive)
-        sys.stdin = self.console = self.get_remote_proxy("stdin")
-        sys.stdout = _RPCFile(self.get_remote_proxy("stdout"))
-        sys.stderr = _RPCFile(self.get_remote_proxy("stderr"))
+        self.console = self.get_remote_proxy("stdin")
+        sys.stdin = _RPCInputFile(self.console)
+        sys.stdout = _RPCOutputFile(self.get_remote_proxy("stdout"))
+        sys.stderr = _RPCOutputFile(self.get_remote_proxy("stderr"))
         from idlelib import IOBinding
         sys.stdin.encoding = sys.stdout.encoding = \
                              sys.stderr.encoding = IOBinding.encoding