프로그래밍언어/파이썬[Error]

[파이썬][Error] 101. BrokenPipeError - [Errno 32] Broken pipe

about_IT 2025. 6. 1. 00:47
728x90

BrokenPipeError: [Errno 32] Broken pipe 오류는 한 쪽 프로세스가 데이터를 보내려 할 때, 상대방이 먼저 연결을 종료한 경우 발생합니다. 주로 파이프 또는 소켓 통신에서 데이터를 쓰려고 시도했지만, 읽는 쪽이 먼저 닫힌 상황에서 자주 발생합니다.

이 오류는 서버-클라이언트 통신, subprocess의 표준 입출력, 또는 multiprocessing 간 파이프 연결 등에서 발생할 수 있으며, 데이터 전송 전에 연결 유효성을 확인하는 것이 중요합니다.

● 오류 발생 예시

import os
r, w = os.pipe()
os.close(r)
os.write(w, b"데이터")

읽기용 파이프를 먼저 닫은 뒤 데이터를 쓰려고 하면 BrokenPipeError가 발생합니다.

● 주요 원인

  • 서버가 예기치 않게 종료되었을 때
  • 소켓 또는 파이프 연결 종료 이후 데이터 전송 시도
  • subprocess에서 입력 스트림이 닫혔을 때 계속 쓰기 시도

● 해결 방법

  • 연결 상태를 수시로 확인하고 예외 처리 추가
  • 데이터 전송 전 상대방 연결이 살아 있는지 점검
  • try-except 블록으로 BrokenPipeError 감지 및 로깅

● 예시 코드 (예외 처리)

import os

r, w = os.pipe()
os.close(r)
try:
    os.write(w, b"hello")
except BrokenPipeError:
    print("파이프가 끊어졌습니다.")

● 결론

BrokenPipeError는 데이터 수신 측이 먼저 연결을 종료했을 때 발생하는 오류로, 네트워크 및 프로세스 간 통신에서 빈번하게 나타납니다. 이러한 경우를 대비해 적절한 예외 처리와 연결 상태 확인이 중요합니다.

728x90