python / python/cpython

Misbehavior of KeyboardInterrupt/EOFError and `input` on Windows

Ouverte
#141,381 7 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

OS-windows pending stdlib type-bug
Langage dominant
Python
Étoiles
77.2k
Forks
35.9k
Métriques de merge des PR
Métriques de PR en attente

Description

Bug report

Bug description:
import sys
from http.server import BaseHTTPRequestHandler, HTTPServer
from typing import NoReturn


def run_server() -> None:
    httpd = HTTPServer(("", 0), BaseHTTPRequestHandler)

    print("Starting service")
    try:
        httpd.serve_forever()
    except KeyboardInterrupt:
        print("Service stopped by ^C")
    finally:
        httpd.shutdown()
        httpd.server_close()


def run() -> NoReturn:
    print(f"Python: v{sys.version}")

    while True:
        try:
            input("input>")
        except KeyboardInterrupt:
            print("^C")
            continue
        except EOFError:
            print("Manually force exit")
            sys.exit()

        run_server()


if __name__ == "__main__":
    run()

I'm not sure if it's a bug

Expected
  • When input, ^C can cancel current input and enter the next cycle
  • When server, ^C can close server and enter the next cycle
  • ^Z to exit (print("Manually force exit"))
Factual
  • Enter to open server -> type ^C to close server -> type ^C
    • When py xxx.py, print("Manually force exit")
    • When pdb, \.vscode\extensions\ms-python.debugpy-2025.14.1-win32-x64\bundled\libs\debugpy\_vendored\pydevd\_pydevd_sys_monitoring\_pydevd_sys_monitoring.py", line 873 KeyboardInterrupt
CPython versions tested on:

3.14

Operating systems tested on:

Windows

Guide de contribution

Ouvrir le guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Piste de recherche

Commencez par reproduire l’exemple run() fourni sous Windows avec Python 3.14, en vous concentrant sur input, KeyboardInterrupt, EOFError et la transition vers run_server. Comparez le comportement lors d’un lancement normal et sous pdb ; c’est terminé lorsque le flux de contrôle observé correspond aux attentes indiquées pour l’annulation de la saisie, l’arrêt du serveur et la sortie avec ^Z.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
python
Domaine
cli, operating-systems
Type d'issue
Bug
Difficulté
4/5
Temps estimé
3-5 jours
Activité
À l'abandon
Clarté
À clarifier
Accessibilité débutants
35/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.