External pager resets custom SIGINT handlers to SIG_DFL
Evaluación
- Dificultad
- 2/5
- Tiempo estimado
- 1-3 horas
- Aptitud para principiantes
- 82/100
Línea de trabajo
Empieza con More() en fire/console/console_io.py e inspecciona cómo ejecuta el paginador externo y maneja las excepciones. Guarda el controlador activo antes de ignorar SIGINT y asegúrate de que se restaure después de que termine el paginador, incluso si se producen excepciones. La tarea está terminada cuando el controlador anterior permanece instalado en ambos casos; el issue no proporciona ningún archivo de prueba, así que identifica una prueba adecuada para este comportamiento.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
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.
- Lenguaje dominante
- Python
- Estrellas
- 28.2k
- Forks
- 1.5k
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Sin plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de google/python-fire
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
google/python-fire#733 ·
-
EllipsisMiddleTruncate exceeds requested width when only the ellipsis fitsPosiblemente ocupada @hugosmoreira la tomó hace 14 días. Abierto
Dificultad 1/5 1-3 horas Aptitud para principiantes 88/100
google/python-fire#722 · 1 comentario ·
-
Windows ANSI initialization uses nonexistent subprocess.STD_OUTPUT_HANDLEPosiblemente ocupada @Fire162 la tomó hace 11 días. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
google/python-fire#721 · 1 comentario ·
-
Setup docs still say `python setup.py install`, but `setup.py` was removedPosiblemente ocupada @GreedyC la tomó hace 18 días. Abierto
Dificultad 1/5 1-3 horas Aptitud para principiantes 93/100
google/python-fire#718 · 1 comentario ·
-
Calling an async command from an active event loop raises RuntimeError and leaves an unawaited coroutinePosiblemente ocupada @aashish254 la tomó hace 20 días. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
google/python-fire#716 ·
Todos los issues de google/python-fire
Issues similares
-
`destroy` sans terminal répond « Aborted. » au lieu de réclamer `--yes` comme `clean` et `reset`Abiertobug
Dificultad 2/5 1-3 horas Aptitud para principiantes 85/100
stephrobert/dsoxlab#354 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 77/100
jasonacox/pypowerwall#472 ·
Los mantenedores suelen responder en 1 día
-
[Bug]: DoubleMLRDDData accepts a score_col that is no data column (as in its docstring example); the running variable then becomes a covariate and RDFlex failsPosiblemente ocupada @vrjdev la tomó hoy. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
DoubleML/doubleml-for-py#455 ·
Los mantenedores suelen responder en 1 día
-
[Bug]: Python mod.Box[T] annotation gets a false generic_arg edge that replaces the parameter_type one ('is' on tree-sitter nodes)Posiblemente ocupada @rohit-jsfreaky la tomó hoy. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 88/100
Graphify-Labs/graphify#5110 · 1 comentario ·
Los mantenedores suelen responder en 2 días
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
assafelovic/gpt-researcher#2277 ·
Los mantenedores suelen responder en 10 días