[code-quality] No output when running from nosetests and jobs != 1

Ian Cordasco graffatcolmingov at gmail.com
Sun Mar 8 15:37:09 CET 2015


On Sat, Mar 7, 2015 at 10:23 PM, Michael McNeil Forbes
<michael.forbes+python at gmail.com> wrote:
> Dear Flake8ers,
>
> I am trying to run flake8 programmatically in a Test class as follows:
>
> import flake8.main
> import nose.tools as nt
>
> class TestCodeFormat(object):
>     def setUp(self):
>         self.files = find_py_files(os.path.dirname(mmfutils.__file__))
>
>     def test_flake8_conformance(self):
>         # Pass in the files here so that config setup.cfg file gets found
>         style_guide = flake8.main.get_style_guide(paths=self.files)
>         result = style_guide.check_files()
>         nt.eq_(result.total_errors, 0,
>                "Found {0} code style errors (and warnings)."
>                .format(result.total_errors))
>

The code looks vaguely correct. I don't remember the behaviour of
using get_style_guide without providing a list of default config files
though (I doubt it affects this though).

> The problem I am having is that there is no output when jobs > 1.  This is probably something to do with stdout flushing and multiprocessing when running under nosetests.
>
> Is there any solution that will allow parallel processing with displayed output.  (I could change the error message to use result.messages or something, but don't see an easy way of properly formatting output with filenames and lines numbers etc.)

nose may not support this usecase.

> Thanks,
> Michael.
>
> P.S.
>
> 1) Please let me know if I should file an issue.  I thought this might be resolved by #21 but even using the latest sources does not help.
>
> 2) flake8 and python setup.py flake8 both work fine, so another solution would be if I can somehow trigger this from "python setup.py nosetests" or "python setup.py test" but it seems to be something of a challenge to customize setup.py commands.
>
> 3) Setting nose's nocapture=1 also works, but the errors then are not deferred until the end of the tests and so can get lost.

So if you do `python setup.py tests -s` then the errors will all be
printed, correct? I suspect this is something to do with how flake8
defers printing and how nosetests expects to receive data on stdout.
I'm not sure flake8 wants to support nose like this.


More information about the code-quality mailing list