[Python-Dev] Help preventing SIGPIPE/SIG_DFL anti-pattern. (original) (raw)
Alfred Perlstein alfred at freebsd.org
Sat Jun 30 11:14:17 EDT 2018
- Previous message (by thread): [Python-Dev] Python 3.7.0 is now available! (and so is 3.6.6)
- Next message (by thread): [Python-Dev] Help preventing SIGPIPE/SIG_DFL anti-pattern.
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Hello,
I'm looking for someone in the python community to help with a problem of anti-patterns showing up dealing with SIGPIPE.
Specifically I've noticed an anti-pattern developing where folks will try to suppress broken pipe errors written to stdout by setting SIGPIPE's disposition to SIG_DFL. This is actually very common, and also rather broken due to the fact that for all but the most simple text filters this opens up a problem where the process can exit unexpectedly due to SIGPIPE being generated from a remote connection the program makes.
I have attached a test program which shows the problem.
to use this program it takes several args.
1. Illustrate the 'ugly output to stderr' that folks want to avoid:
% python3 t0.py nocatch | head -1
2. Illustrate the anti-pattern, the program exits on about line 47
which most folks to not understand
% python3 t0.py dfl | head -1
3. Show a better solution where we catch the pipe error and cleanup to
avoid the message:
% python3 t0.py | head -1
I did a recent audit of a few code bases and saw this pattern pop often often enough that I am asking if there's a way we can discourage the use of "signal(SIGPIPE, SIG_DFL)" unless the user really understands what they are doing.
I do have a pull req here: https://github.com/python/cpython/pull/6773 where I am trying to document this on the signal page, but I can't sort out how to land this doc change.
thank you,
-Alfred
-------------- next part -------------- A non-text attachment was scrubbed... Name: t0.py Type: text/x-python-script Size: 2223 bytes Desc: not available URL: <http://mail.python.org/pipermail/python-dev/attachments/20180630/060d0be4/attachment.bin>
- Previous message (by thread): [Python-Dev] Python 3.7.0 is now available! (and so is 3.6.6)
- Next message (by thread): [Python-Dev] Help preventing SIGPIPE/SIG_DFL anti-pattern.
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]