From: Robert Klemme Date: 2004-10-23T07:34:13+09:00 Subject: Re: [Q] Problem with popen on WIn32 (1.8.x) "Laurent Julliard" 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