exception_name, hex_errno, err_msg = (
errpipe_data.split(b':', 2))
except ValueError:
- warnings.warn(RuntimeWarning(
- 'Bad exception data: %r' % errpipe_data))
- exception_name = b'RuntimeError'
+ exception_name = b'SubprocessError'
hex_errno = b'0'
- err_msg = b'Unknown'
+ err_msg = (b'Bad exception data from child: ' +
+ repr(errpipe_data))
child_exception_type = getattr(
builtins, exception_name.decode('ascii'),
- RuntimeError)
+ SubprocessError)
for fd in (p2cwrite, c2pread, errread):
if fd != -1:
os.close(fd)
Library
-------
+ - Remove a bare print to stdout from the subprocess module that could have
+ happened if the child process wrote garbage to its pre-exec error pipe.
+
+- The subprocess module now raises its own SubprocessError instead of a
+ RuntimeError in various error situations which should not normally happen.
+
- Issue #16327: The subprocess module no longer leaks file descriptors
used for stdin/stdout/stderr pipes to the child when fork() fails.