How can I use "puts" to the console without a line break in ruby on rails?
70,040
You need to use print instead of puts. Also, if you want the dots to appear smoothly, you need to flush the stdout buffer after each print...
def print_and_flush(str)
print str
$stdout.flush
end
100.times do
print_and_flush "."
sleep 1
end
Edit: I was just looking into the reasoning behind flush to answer @rubyprince's comment, and realised this could be cleaned up a little by simply using $stdout.sync = true
...
$stdout.sync = true
100.times do
print "."
sleep 1
end
Related videos on Youtube
Author by
Satchel
Former electrical engineer but learning ruby from scratch thanks to stack overflow. Still so much to learn.
Updated on February 07, 2020Comments
-
Satchel over 4 years
I have a method which goes through a loop -- I want it to output a "." each loop so I can see it in the console. however, it puts a linebreak at the end of each when I use
puts "."
.If there a way so that it just has a continuous line?
-
rubyprince about 13 yearsIs
$stdout.flush
really needed?..I am using Ruby 1.8.7 and I have done things just withprint
and I had no problems.. -
idlefingers about 13 yearsIt's useful if you're doing something like a progress bar. When you just use
print
by itself, it can come out in blocks because it can be stored in the buffer instead of being written straight away (I don't know exactly why). It may be OS specific, too. -
Satchel about 13 yearsI tried it with @stdout.flush...any benefits with using .sync=true instead?
-
akostadinov about 7 yearsI think setting stdout to
sync
is an overkill to output one string. Then if you app outputs a lot it will be slower.