diff --git a/Lib/subprocess.py b/Lib/subprocess.py index e4ca5f500c21a7..d375514b2dd0a6 100644 --- a/Lib/subprocess.py +++ b/Lib/subprocess.py @@ -1535,10 +1535,8 @@ def _communicate(self, input, endtime, orig_timeout): self.stderr.close() # All data exchanged. Translate lists into strings. - if stdout is not None: - stdout = stdout[0] - if stderr is not None: - stderr = stderr[0] + stdout = stdout[0] if stdout else None + stderr = stderr[0] if stderr else None return (stdout, stderr) diff --git a/Misc/NEWS.d/next/Library/2021-03-11-15-44-18.bpo-43423.rRomRD.rst b/Misc/NEWS.d/next/Library/2021-03-11-15-44-18.bpo-43423.rRomRD.rst new file mode 100644 index 00000000000000..290d7fbd91800c --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-03-11-15-44-18.bpo-43423.rRomRD.rst @@ -0,0 +1,2 @@ +:func:`subprocess.communicate` no longer raises an IndexError when there is an +empty stdout or stderr IO buffer during a timeout on Windows.