python / python/cpython

Failure during the print of select.select output with unblocking sys.stdin

Offen
#126,468 6 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

extension-modules topic-socket type-bug
Vorherrschende Sprache
Python
Sterne
77.2k
Forks
35.9k
PR-Merge-Kennzahlen
PR-Kennzahlen ausstehend

Beschreibung

Bug report

Bug description:

This code terminates with error messages after several loop iterations:

import sys
import os
import select

os.set_blocking(sys.stdin.fileno(), False)

while True:
    print('>')
    ready = select.select([sys.stdin, ], [], [], 0.0)[0]
    print(f'< ready={ready}')
$ python3.11 stdin-nonblocking-bug-report.py
<... skip many iterations ...>
< ready=[]
>
< ready=[]
>
< ready=[]
Traceback (most recent call last):
Exception ignored in: <_io.TextIOWrapper name='<stdout>' mode='w' encoding='utf-8'>
Exception ignored in sys.unraisablehook: <built-in function unraisablehook>

$ echo $?
120

The failure occurs in print(f'< ready={ready}').

Python-3.11
FreeBSD 14.1

CPython versions tested on:

3.11

Operating systems tested on:

Other

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Rechercherichtung

Beginne mit dem bereitgestellten Reproducer, der sys.stdin auf nonblocking setzt und wiederholt select.select aufruft, bevor er etwas ausgibt. Reproduziere den Fehler unter Python 3.11 mit FreeBSD 14.1 und verfolge dann den stdout-Ausgabe- und Shutdown-Pfad, um die Ursache zu ermitteln. Als erledigt gilt die Aufgabe, wenn die Schleife unter den genannten Bedingungen nicht mehr den gemeldeten unraisable I/O-Fehler erzeugt.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
python
Bereich
operating-systems
Issue-Typ
Bug
Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Aktivitätsstatus
Veraltet
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
35/100

Neue Issues direkt in Ihr Postfach

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