Forum: Ruby Immediately output stdout

80e405881f52abd601bf8d6fe0ff1c1f?d=identicon&s=25 Nick Khir (hitryy)
on 2016-10-07 17:11
0
down vote
favorite


How can I immediately output stdout? stdout is going to print after all
input is complete.

require 'open3'
def run(cmd)
    Open3.popen3(cmd) do |stdin, stdout, stderr, thread|

    Thread.new do
      stdout.each {|l| puts l}
    end

    Thread.new do
      while thread.alive?
        stdin.puts $stdin.gets
      end
    end

    thread.join
  end
end

run ("ruby file_to_test.rb")

file_to_test.rb:

puts "please, enter s"
puts "please, enter q"

s = gets.chomp!
q = gets.chomp!

puts s
puts q

The result after running main.rb is:

somestring
somestring2
please, enter s
please, enter q
somestring
somestring2

How can I immediately output stdout?
0fa73332c8e4a3b06ea439fd3f034322?d=identicon&s=25 Ronald Fischer (rovf)
on 2016-11-07 14:39
Set stdout to unbuffered. In your case:

stdout.sync = true
Please log in before posting. Registration is free and takes only a minute.
Existing account

NEW: Do you have a Google/GoogleMail, Yahoo or Facebook account? No registration required!
Log in with Google account | Log in with Yahoo account | Log in with Facebook account
No account? Register here.