"Laurent Julliard" <laurent@moldus.org> schrieb im Newsbeitrag news:417979EB.7090107@moldus.org...
Can anybody tell me why the following Ruby code that uses popen doesn't work at all on my Windows XP (Pro SP1) machine, ruby 1.8.2 preview2 or 1.8.1?
you.rb
------
while true
sleep 1
puts "This line should print in me.rb"
end
me.rb
-----
pig = IO.popen("ruby.exe you.rb", "w+")
while true
pig.gets
end
Launch me.rb and you'll see that no output is showing at all. On Linux it works like a charm.
If you succeed in making this work can you tell me which version of Ruby and Windows you are using?
Thanks for all your help
:-))) You forgot the "puts" in me.rb. For me, this works:
you.rb
while true
sleep 1
puts "This line should print in me.rb"
end
me.rb
pig = IO.popen("ruby.exe you.rb", "w+")
while true
puts pig.gets
end
If you're not patient, then you should use synchronized output, i.e. switch on flushing of every line like this in the first line of me.rb:
$defout.sync=true
Otherwise it'll take some time until the pipe fills and you see first results on the reader side. But when they come they come in chunks of several lines.
Btw, I'd use the block form to ensure proper cleanup and used flag "r" because we want to read only here. (I know that this is useless in this case, but IMHO it's better to start with the better pattern right from the start. Can save you some time later when you don't have to hunt down strange bugs.) So I had written me.rb like this:
me2.rb
IO.popen("ruby.exe you.rb", "r") do |pig|
while ( line = pig.gets )
puts line
end
end
Kind regards
robert