Patch #581705: Catch OSError, termios.error in spawn. 2.2 bugfix candidate.
diff --git a/Lib/pty.py b/Lib/pty.py
index a2f21c9..a08aa1b 100644
--- a/Lib/pty.py
+++ b/Lib/pty.py
@@ -154,9 +154,14 @@
     pid, master_fd = fork()
     if pid == CHILD:
         apply(os.execlp, (argv[0],) + argv)
-    mode = tty.tcgetattr(STDIN_FILENO)
-    tty.setraw(STDIN_FILENO)
+    try:
+        mode = tty.tcgetattr(STDIN_FILENO)
+        tty.setraw(STDIN_FILENO)
+        restore = 1
+    except tty.error:    # This is the same as termios.error
+        restore = 0
     try:
         _copy(master_fd, master_read, stdin_read)
-    except IOError:
-        tty.tcsetattr(STDIN_FILENO, tty.TCSAFLUSH, mode)
+    except (IOError, OSError):
+        if restore:
+            tty.tcsetattr(STDIN_FILENO, tty.TCSAFLUSH, mode)