You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
asyncio subprocess stdout occasionally lost (3.11.0 → 3.11.1 regression) #100133
So, I've updated python from 3.11.0 to 3.11.1 and one of my utilities which runs a lot of external processes with asyncio.create_subprocess_exec started failing in different places in weird ways. It turned out that with some probability asyncio.subprocess.Process.communicate() would now return an empty stdout. Here's a repro:
import asyncio
async def main():
attempt = 1
while True:
proc = await asyncio.create_subprocess_exec('/bin/echo', 'test', stdout=asyncio.subprocess.PIPE, stderr=asyncio.subprocess.PIPE)
stdout, stderr = await proc.communicate()
text = stdout.decode('utf-8').strip()
if text != 'test':
raise RuntimeError(f'FAIL on attempt {attempt}: output="{text}"')
attempt += 1
asyncio.run(main())
You may have to wait somewhat for the problem to reproduce, but for me it fails in under 15 seconds more or less reliably. Possible output:
RuntimeError: FAIL on attempt 3823: output=""
Your environment
CPython versions tested on: 3.11.1
Operating system and architecture: FreeBSD 13.1 amd64
changed the title [-]asyncio subprocess stdout lost (3.11.0 → 3.11.1 regression)[/-][+]asyncio subprocess stdout occasionally lost (3.11.0 → 3.11.1 regression)[/+]on Dec 9, 2022
commit 7015e1379791cbf19908cd1a7c668a5d6e7165d5
Date: Wed Oct 5 10:15:31 2022
gh-88050: Fix asyncio subprocess to kill process cleanly when process is blocked (#32073)
Activity
[-]asyncio subprocess stdout lost (3.11.0 → 3.11.1 regression)[/-][+]asyncio subprocess stdout occasionally lost (3.11.0 → 3.11.1 regression)[/+]AMDmi3 commentedon Dec 9, 2022
@kumaraditya303 FYI, there were some commits to asyncio subprocess from you recently.
mportesdev commentedon Dec 9, 2022
I experienced this too, reported it here with some additional info:
https://discuss.python.org/t/python-3-11-1-async-subprocess-stdout-lost-when-piped/21788
mportesdev commentedon Dec 9, 2022
For me, the following script always results with an unexpected
[b'', b'', b'baz\n']both in Python 3.11.1 and 3.12.0a3.gvanrossum commentedon Dec 9, 2022
Let’s bisect that repro to a specific commit.
gvanrossum commentedon Dec 12, 2022
The bisection points to
We will get it fixed in 3.11.2.
kumaraditya303 commentedon Dec 12, 2022
Thanks for the bug report, I have a fix for this #100154, can you verify it that it works as you expect? Thanks @AMDmi3
AMDmi3 commentedon Dec 12, 2022
The fix works for me, thank you!
GH-100133: fix `asyncio` subprocess losing `stderr` and `stdout` outp…
pythonGH-100133: fix `asyncio` subprocess losing `stderr` and `stdout…
GH-100133: fix `asyncio` subprocess losing `stderr` and `stdout` outp…
lang/python311: fix asyncio.subprocess regression
Merged main into regmachine branch (#50)
00395: pythonGH-100133: fix `asyncio` subprocess losing `stderr` and …
Add tests for tracing down the issue with bluetoothctl version
lang/python311: fix asyncio.subprocess regression