"Broken pipe" exception when output piped to `head`
Given this version of flake8:
$ flake8 --version
2.4.1 (pep8: 1.5.7, pyflakes: 0.8.1, mccabe: 0.3.1) CPython 2.6.9 on Linux
And a project that generates heaps of lint:
$ flake8 . | wc -l
42
Then piping the output of flake8 to head
:
$ flake8 . | head
Causes a stack trace with a "Broken pipe" exception:
./tests/test_file_reader_writer.py:1:1: F401 'test_setup' imported but unused
./tests/test_file_reader_writer.py:1:18: E261 at least two spaces before inline comment
./tests/test_file_reader_writer.py:1:19: E262 inline comment should start with '# '
./tests/test_file_reader_writer.py:7:1: E302 expected 2 blank lines, found 1
./tests/test_file_reader_writer.py:39:1: W293 blank line contains whitespace
./tests/test_reader_writer.py:1:1: F401 'test_setup' imported but unused
./tests/test_reader_writer.py:7:1: E302 expected 2 blank lines, found 1
./tests/test_reader_writer.py:15:34: W291 trailing whitespace
./tests/captive_rabbit/__init__.py:1:1: F401 'Rabbit' imported but unused
./tests/captive_rabbit/__init__.py:2:1: F401 'Queue' imported but unused
Process Process-2:
Traceback (most recent call last):
File "/home/wayne/.pyenv/versions/2.6.9/lib/python2.6/multiprocessing/process.py", line 232, in _bootstrap
self.run()
File "/home/wayne/.pyenv/versions/2.6.9/lib/python2.6/multiprocessing/process.py", line 88, in run
self._target(*self._args, **self._kwargs)
File "/home/wayne/.pyenv/versions/2.6.9/lib/python2.6/site-packages/flake8/reporter.py", line 74, in process_main
self._process_main()
File "/home/wayne/.pyenv/versions/2.6.9/lib/python2.6/site-packages/flake8/reporter.py", line 50, in _process_main
self.input_file(filename)
File "/home/wayne/.pyenv/versions/2.6.9/lib/python2.6/site-packages/flake8/engine.py", line 95, in input_file
return fchecker.check_all(expected=expected, line_offset=line_offset)
File "/home/wayne/.pyenv/versions/2.6.9/lib/python2.6/site-packages/pep8.py", line 1457, in check_all
return self.report.get_file_results()
File "/home/wayne/.pyenv/versions/2.6.9/lib/python2.6/site-packages/flake8/reporter.py", line 119, in get_file_results
sys.stdout.flush()
IOError: [Errno 32] Broken pipe
Process Process-4:
Traceback (most recent call last):
File "/home/wayne/.pyenv/versions/2.6.9/lib/python2.6/multiprocessing/process.py", line 232, in _bootstrap
self.run()
File "/home/wayne/.pyenv/versions/2.6.9/lib/python2.6/multiprocessing/process.py", line 88, in run
self._target(*self._args, **self._kwargs)
File "/home/wayne/.pyenv/versions/2.6.9/lib/python2.6/site-packages/flake8/reporter.py", line 74, in process_main
self._process_main()
File "/home/wayne/.pyenv/versions/2.6.9/lib/python2.6/site-packages/flake8/reporter.py", line 50, in _process_main
self.input_file(filename)
File "/home/wayne/.pyenv/versions/2.6.9/lib/python2.6/site-packages/flake8/engine.py", line 95, in input_file
return fchecker.check_all(expected=expected, line_offset=line_offset)
File "/home/wayne/.pyenv/versions/2.6.9/lib/python2.6/site-packages/pep8.py", line 1457, in check_all
Process Process-1:
Traceback (most recent call last):
File "/home/wayne/.pyenv/versions/2.6.9/lib/python2.6/multiprocessing/process.py", line 232, in _bootstrap
self.run()
File "/home/wayne/.pyenv/versions/2.6.9/lib/python2.6/multiprocessing/process.py", line 88, in run
self._target(*self._args, **self._kwargs)
File "/home/wayne/.pyenv/versions/2.6.9/lib/python2.6/site-packages/flake8/reporter.py", line 74, in process_main
self._process_main()
File "/home/wayne/.pyenv/versions/2.6.9/lib/python2.6/site-packages/flake8/reporter.py", line 50, in _process_main
self.input_file(filename)
File "/home/wayne/.pyenv/versions/2.6.9/lib/python2.6/site-packages/flake8/engine.py", line 95, in input_file
return fchecker.check_all(expected=expected, line_offset=line_offset)
File "/home/wayne/.pyenv/versions/2.6.9/lib/python2.6/site-packages/pep8.py", line 1457, in check_all
Workaround
I can see the output sans the stack trace by redirecting stderr to /dev/null:
$ flake8 . 2>/dev/null | head
./tests/test_pika_message.py:1:1: F401 'test_setup' imported but unused
./tests/test_pika_message.py:8:1: E302 expected 2 blank lines, found 1
./tests/test_pika_message.py:15:29: E251 unexpected spaces around keyword / parameter equals
./tests/test_pika_message.py:15:31: E251 unexpected spaces around keyword / parameter equals
./tests/captive_rabbit/__init__.py:1:1: F401 'Rabbit' imported but unused
./tests/captive_rabbit/__init__.py:2:1: F401 'Queue' imported but unused
./tests/captive_rabbit/__init__.py:3:1: F401 'Message' imported but unused
./tests/test_file_reader_writer.py:1:1: F401 'test_setup' imported but unused
./tests/test_file_reader_writer.py:1:18: E261 at least two spaces before inline comment
./tests/test_file_reader_writer.py:1:19: E262 inline comment should start with '# '
but I think it'd be nice if flake8 omitted the stack trace on a broken pipe error.