python / python/cpython

Misbehavior of KeyboardInterrupt/EOFError and `input` on Windows

Aberta
#141,381 7 comentários 0 reações 0 responsáveis Ver no GitHub

Ninguém assumiu esta issue ainda.

OS-windows pending stdlib type-bug
Linguagem predominante
Python
Estrelas
77.2k
Forks
36k
Métricas de merge de PRs
Métricas de PR pendentes

Descrição

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

Guia de contribuição

Abrir o guia de contribuição

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Direção de pesquisa

Comece reproduzindo o exemplo run() fornecido no Windows com Python 3.14, concentrando-se em input, KeyboardInterrupt, EOFError e na transição de run_server. Compare o comportamento quando iniciado normalmente e sob pdb; o trabalho estará concluído quando o fluxo de controle observado corresponder às expectativas indicadas para cancelar a entrada, parar o servidor e sair com ^Z.

Escrita pelo modelo de indexação a partir do texto da issue.

Avaliação

Stack de tecnologia
python
Domínio
cli, operating-systems
Tipo de issue
Bug
Dificuldade
4/5
Tempo estimado
3-5 dias
Status de atividade
Estagnada
Clareza
Precisa de esclarecimento
Facilidade para iniciantes
35/100

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.