"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