Issue #12493: subprocess: communicate() handles EINTR

subprocess.Popen.communicate() now also handles EINTR errors if the process has
only one pipe.
diff --git a/Lib/subprocess.py b/Lib/subprocess.py
index bdf85fc..ce08f83 100644
--- a/Lib/subprocess.py
+++ b/Lib/subprocess.py
@@ -476,7 +476,7 @@
     while True:
         try:
             return func(*args)
-        except OSError, e:
+        except (OSError, IOError) as e:
             if e.errno == errno.EINTR:
                 continue
             raise
@@ -743,10 +743,10 @@
                             raise
                 self.stdin.close()
             elif self.stdout:
-                stdout = self.stdout.read()
+                stdout = _eintr_retry_call(self.stdout.read)
                 self.stdout.close()
             elif self.stderr:
-                stderr = self.stderr.read()
+                stderr = _eintr_retry_call(self.stderr.read)
                 self.stderr.close()
             self.wait()
             return (stdout, stderr)