When debugging unit tests (through the pycharm test runner), one can turn on the interactive command line, but (unlike when debugging regular scripts) the commands entered don't produce any output. As a matter of fact, it appears that stdout is being captured somewhere, because stderr works as expected:
>>> print "a"
>>> import sys
>>> sys.stderr.write("moof")
moof
>>> sys.stdout.write("moof")
>>> sys.stderr.write("test")
test
Is this expected behavior? I really like the interactive debug console and it would be awesome if it behaved nice when debugging unit tests as well.
This is likely because your test runner is capturing stdout but not stderr.
I use py.test which captures both stdout and stderr so I see no output at all. If I want to see output I have to pass the -s
flag to my py.test runner which can be done by modifying the run/debug configuration and adding this flag to the options field.
(Run > Edit Configurations > Defaults > Python tests > py.test > add -s
to the "additional arguments" field.)
>>> print 'a'
a
>>> import sys
>>> sys.stderr.write('moof')
moof
>>> sys.stdout.write('moof')
moof
>>> sys.stderr.write('test')
test
Note: the -s
flag can equally be used with nose tests
For unittest you can add '--capture=no' to Pycharm Run/Debug configuration - this will show all output in realtime
If you don't want to change run/debug configuration every time you run tests, you can set JB_DISABLE_BUFFERING environment variable as "-s".
It is useful if you use ^+SHIFT+D shortcut to debug tests of current file in editor.