From: Shashank Date Date: 2002-12-19T13:14:07+09:00 Subject: Re: automating script for a command line utility Ok, so may be I should explain this with some example code ( here irb is choosen only for demonstration): check = IO.popen("ruby c:/ruby/bin/irb.rb",'r+') check.puts("s = 'abcd'") check.puts("puts 'matched' if s=~/a|b|c|d/") check.puts("puts $:") check.puts("puts $\"") check.close_write check.readlines.each { |line| puts line.upcase unless line =~ 'nil' } which on my machine (ruby 1.7.3 (2002-11-17) [i386-mswin32]) produces: irb(main):001:0> s = 'abcd' "abcd" irb(main):002:0> puts 'matched' if s=~/a|b|c|d/ matched irb(main):003:0> puts $: C:/ruby/lib/ruby/site_ruby/1.7 C:/ruby/lib/ruby/site_ruby/1.7/i386-msvcrt C:/ruby/lib/ruby/site_ruby C:/ruby/lib/ruby/1.7 C:/ruby/lib/ruby/1.7/i386-mswin32 . irb(main):004:0> puts $" irb.rb e2mmap.rb irb/init.rb irb/context.rb irb/workspace.rb irb/extend-command.rb irb/ruby-lex.rb irb/slex.rb irb/ruby-token.rb irb/input-method.rb irb/locale.rb tempfile.rb delegate.rb irb(main):005:0> exit Notice that I have to club all the "check.puts" functions before the "check.close_write" and then do readlines Is there a way to check.puts each command and then immediately read the lines of output ? I think IO#popen3 might do this, but it is not available on Windows. TIA, -- shanko "Shashank Date" wrote in message news:e90M9.26673$_b.451371@twister.kc.rr.com... > I am trying to automate an interactive DOS command line utility (something > like irb) > using ruby 1.7.3 (on Windows 2000). > > I tried using IO#popen but could not make the inputs (puts) interlace with > outputs (gets). > I had to batch all the puts's together before doing the gets. > > Any suggestions ? > > TIA, > -- shanko > >