Hacktoberfest 2026: die Issues, die Maintainer für den Oktober markiert haben – offen und einsteigerfreundlich. Hacktoberfest-Issues durchsuchen

`asyncio.create_subprocess_exec`: cannot read `/dev/stdin`

Offen
#532 2 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Bewertung

Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Anfängerfreundlichkeit
45/100
Issue-Typ
Bug
Klarheit
Klar beschrieben
Aktivitätsstatus
Veraltet
Tech-Stack
python

Rechercherichtung

Beginne mit dem Reproducer in test.py und vergleiche sein Verhalten mit vanilla asyncio unter Linux in Docker. Verfolge die Behandlung von subprocess stdin durch uvloop/loop.pyx, uvloop/handles/stream.pyx und uvloop/handles/handle.pyx. Als abgeschlossen gilt die Aufgabe, wenn der /dev/stdin-Subprozess unter uvloop b'test' ausgibt, ohne dass der closed-transport error auftritt.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

  • uvloop version: uvloop==0.17.0
  • Python version: Python 3.10.10
  • Platform: Linux 0af9a1603f81 5.10.76-linuxkit #1 SMP Mon Nov 8 10:21:19 UTC 2021 x86_64 GNU/Linux (in a Docker container)
  • Can you reproduce the bug with PYTHONASYNCIODEBUG in env?: yes
  • Does uvloop behave differently from vanilla asyncio? How?: yes. Vanilla asyncio had a similar issue patched: https://github.com/python/cpython/issues/90522

Processes run with asyncio.create_subprocess_exec fail to read from /dev/stdin with uvloop but not with asyncio

asyncio had a similar issue fixed recently (in January 2022): https://github.com/python/cpython/issues/90522
This was backported to 3.10 and 3.11

I can reproduce this on Linux in a Docker container, with either Mac OS or Linux as hosts
I cannot reproduce this on Mac OS (seems to work fine)

Logs:

# PYTHONASYNCIODEBUG=1 python test.py
cat: /dev/stdin: No such device or address
Traceback (most recent call last):
  File "//test.py", line 16, in <module>
    asyncio.run(f())
  File "/usr/local/lib/python3.10/asyncio/runners.py", line 44, in run
    return loop.run_until_complete(main)
  File "uvloop/loop.pyx", line 1517, in uvloop.loop.Loop.run_until_complete
  File "//test.py", line 13, in f
    stdout, _ = await proc.communicate("test".encode("utf-8"))
  File "/usr/local/lib/python3.10/asyncio/subprocess.py", line 195, in communicate
    stdin, stdout, stderr = await tasks.gather(stdin, stdout, stderr)
  File "/usr/local/lib/python3.10/asyncio/subprocess.py", line 147, in _feed_stdin
    self.stdin.write(input)
  File "/usr/local/lib/python3.10/asyncio/streams.py", line 325, in write
    self._transport.write(data)
  File "uvloop/handles/stream.pyx", line 674, in uvloop.loop.UVStream.write
  File "uvloop/handles/handle.pyx", line 159, in uvloop.loop.UVHandle._ensure_alive
RuntimeError: unable to perform operation on <WriteUnixTransport closed=True reading=False 0x7f64e3186dc0>; the handler is closed

Expected (using asyncio):

# PYTHONASYNCIODEBUG=1 python test.py
b'test'

Code to reproduce:

import asyncio

# Commenting out `uvloop` below fixes the issue
import uvloop
uvloop.install()

async def f():
    proc = await asyncio.create_subprocess_exec(
        "cat",
        "/dev/stdin",
        stdin=asyncio.subprocess.PIPE,
        stdout=asyncio.subprocess.PIPE,
    )
    stdout, _ = await proc.communicate("test".encode("utf-8"))
    print(stdout)

asyncio.run(f())
Vorherrschende Sprache
Cython
Sterne
11.9k
Forks
615
PR-Merge-Kennzahlen
Keine gemergten PRs in 30 T.

Beitragsleitfaden

Für dieses Repository ist kein Beitragsleitfaden indexiert

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus MagicStack/uvloop

Alle Issues in MagicStack/uvloop

Ähnliche Issues

Weitere Issues zu Backend & API Design

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.