External pager resets custom SIGINT handlers to SIG_DFL

Ouverte Adaptée aux débutants
#723 1 commentaire 0 réactions 0 personnes assignées Voir sur GitHub

@hugosmoreira y travaille déjà.

Depuis le 26/10/2026.

  • #725 par @hugosmoreira — ouverte

Évaluation

Difficulté
2/5
Temps estimé
1-3 heures
Accessibilité débutants
82/100
Type d'issue
Bug
Clarté
Clairement spécifiée
Activité
Active
Stack technique
python
Domaine
cli

Piste de recherche

Commencez par More() dans fire/console/console_io.py et examinez comment le paginateur externe est exécuté et comment les exceptions sont gérées. Enregistrez le gestionnaire actif avant que SIGINT soit ignoré, puis veillez à ce qu’il soit restauré après la fin du paginateur, y compris en cas d’exception. La tâche est terminée lorsque le gestionnaire précédent reste installé dans les deux cas ; l’issue ne fournit aucun fichier de test, identifiez donc un test approprié pour ce comportement.

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

Description

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.

Langage dominant
Python
Étoiles
28.2k
Forks
1.5k
Métriques de merge des PR
Aucune PR mergée en 30 j

Préparer son environnement

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.

Autres issues de google/python-fire

Toutes les issues de google/python-fire

Issues similaires

Plus d'issues Python

Recevez les nouvelles issues par e-mail

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