Jenkins console output not in realtime
To clarify some of the answers.
ruby
orpython
or any sensible scripting language will buffer the output; this is in order to minimize the IO; writing to disk is slow, writing to a console is slow...- usually the data gets
flush()
'ed automatically after you have enough data in the buffer with special handling for newlines. e.g. writing a string without newline thensleep()
would not write anything until after thesleep()
is complete (I'm only usingsleep
as an example, feel free to substitute with any other expensive system call).
e.g. this would wait 8 seconds, print one line, wait 5 more seconds, print a second line.
from time import sleep
def test():
print "ok",
time.sleep(3)
print "now",
time.sleep(5)
print "done"
time.sleep(5)
print "again"
test()
for
ruby
,STDOUT.sync = true
, turns theautoflush
on; all writes toSTDOUT
are followed byflush()
. This would solve your problem but result in more IO.STDOUT.sync = true
for
python
, you can usepython -u
or the environment variablePYTHONUNBUFFERED
to makestdin/stdout/stout
not buffered, but there are other solutions that do not changestdin
orstderr
export PYTHONUNBUFFERED=1
for
perl
, you haveautoflush
autoflush STDOUT 1;
Make sure your script is flushing its stdout and stderr. In my case I had a buffering issue similar to what you describe but I was using python. The following python code fixed it for me:
import sys
sys.stdout.flush()
I'm not a Ruby coder, but Google reveals the following:
$stdout.flush