BrokenPipeError se lanza cuando un proceso intenta escribir en una tubería cuyo extremo de lectura ha sido cerrado. Ocurre comúnmente en tuberías Unix cuando un comando descendente (como head o grep) termina y cierra su stdin antes de que el proceso ascendente haya terminado de escribir.
Por qué ocurre
- •Redirigir la salida a un comando que termina anticipadamente (ej. head -1 o less).
- •Se escribe en un socket de red después de que el extremo remoto haya cerrado la conexión.
- •Un subproceso que lee de una tubería sale antes de consumir toda la salida.
Ejemplos
Código que causa el error
# python script.py | head -1
import sys
for i in range(1000):
print(i) # BrokenPipeError after head closes the pipeError en la terminal
BrokenPipeError: [Errno 32] Broken pipe
Cómo solucionarlo
Captura BrokenPipeError alrededor de tus operaciones de escritura y sal limpiamente. Para scripts que escriben en stdout, cerrar sys.stderr antes de salir suprime el traceback ruidoso. Este es un comportamiento esperado en tuberías Unix y generalmente no es un error en tu código.
Código corregido
import sys
try:
for i in range(1000):
print(i)
except BrokenPipeError:
# Reader closed early, that is fine
sys.stderr.close()Errores relacionados
¿Listo para practicar tu inglés en el trabajo?
Lingua-e tiene ejercicios interactivos basados en conversaciones reales de developers: standups, code reviews, retrospectivas y más. Practica hasta que salga solo.
Prueba Lingua-e gratis