This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

classification
Title: BrokenPipeError when piping to head (linux)
Type: behavior Stage: resolved
Components: IO Versions: Python 3.8
process
Status: closed Resolution: not a bug
Dependencies: Superseder:
Assigned To: Nosy List: royroy
Priority: normal Keywords:

Created on 2022-01-23 19:48 by royroy, last changed 2022-04-11 14:59 by admin. This issue is now closed.

Messages (2)
msg411413 - (view) Author: Roy Assis (royroy) Date: 2022-01-23 19:48
problem:
-------
Python raises exception when piping to head. Exception is not caught by try except.

code:
----
#sample.py
import sys
from time import sleep

try:
    for line in sys.stdin:
        print(line, flush=True)
        sleep(2)
except:
    print("a")

Environment:
----------
# Python 3.8.12 (default, Oct 12 2021, 13:49:34)
# [GCC 7.5.0] :: Anaconda, Inc. on linux
# (scanpyEnv3.8) aaa@IP111-11-1-111:~/scripts/short-python-scripts$ uname -srm
# Linux 5.4.0-1063-aws x86_64

code execution
--------------
# (scanpyEnv3.8) aaa@IP111-11-1-111:~/scripts/short-python-scripts$ echo "a a a a" | sed s'/ /\n/g' | python ./sample.py | head -3
# a
#
# a
# Exception ignored in: <_io.TextIOWrapper name='<stdout>' mode='w' encoding='utf-8'>
# BrokenPipeError: [Errno 32] Broken pipe
msg411416 - (view) Author: Roy Assis (royroy) Date: 2022-01-23 20:08
Resolution in this post:
https://stackoverflow.com/questions/26692284/how-to-prevent-brokenpipeerror-when-doing-a-flush-in-python/26738736

code was changed to:
----
#sample.py
import sys
from time import sleep

try:
    for line in sys.stdin:
        print(line, flush=True)
        sleep(2)
except:
    sys.stderr.close()
    pass
History
Date User Action Args
2022-04-11 14:59:55adminsetgithub: 90650
2022-01-23 20:08:54royroysetstatus: open -> closed
resolution: not a bug
messages: + msg411416

stage: resolved
2022-01-23 19:48:57royroycreate