External pager resets custom SIGINT handlers to SIG_DFL

Aberta Para iniciantes
#723 1 comentário 0 reações 0 responsáveis Ver no GitHub

@hugosmoreira já está trabalhando nisso.

Desde 26/10/2026.

  • #725 de @hugosmoreira — aberto

Avaliação

Dificuldade
2/5
Tempo estimado
1-3 horas
Facilidade para iniciantes
82/100
Tipo de issue
Bug
Clareza
Claramente especificada
Status de atividade
Ativa
Stack de tecnologia
python
Domínio
cli

Direção de pesquisa

Comece com More() em fire/console/console_io.py e examine como o pager externo é executado e como as exceções são tratadas. Salve o handler ativo antes de SIGINT ser ignorado e, em seguida, garanta que ele seja restaurado após a saída do pager, inclusive em caso de exceções. A tarefa estará concluída quando o handler anterior continuar instalado em ambos os casos; o issue não fornece um arquivo de teste, então identifique um teste adequado para esse comportamento.

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

Descrição

In fire/console/console_io.py, the More() function temporarily ignores SIGINT while an external pager runs.

However, it restores SIG_DFL instead of the handler previously installed by the application.

Problematic code
signal.signal(signal.SIGINT, signal.SIG_IGN)

# Execute external pager

signal.signal(signal.SIGINT, signal.SIG_DFL)
Expected behavior

The function should preserve the existing signal handler and restore it after the pager exits, including when an exception occurs.

Actual behavior

Based on the code, applications using custom SIGINT handlers lose their original handler after pager execution. Exceptions may also leave SIGINT ignored.

Suggested fix

Save the original handler and restore it in a finally block.

Testing

Identified through source-code inspection. An interactive pager reproduction has not yet been executed.

Linguagem predominante
Python
Estrelas
28.2k
Forks
1.5k
Métricas de merge de PRs
Nenhum PR com merge em 30d

Preparar o ambiente

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.

Mais de google/python-fire

Todas as issues de google/python-fire

Issues semelhantes

Mais issues de Python

Receba novas issues na sua caixa de entrada

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