Not to ask you to think about a different solution, but since you are  
sending input based on certain output values, would the Ruby Expect  
method be more appropriate?


On Jul 24, 2009, at 10:35 PM, Amogh Gonwar wrote:

> Thanks Brian!
>
> The problem is that "I might have two possible prompts in response to
> one command"
>
> When I execute the command "go" on Telnet, I can either get the:
> prompt 1: BDI> (or)
> prompt 2: - TARGET: stopped \n BDI>
>
> When I get prompt 1, I want it to send in the instructions:
> "re"
> "ci"
> "bi 0x000044bc"
> "go 0"
>
> However when i get prompt 2, i want to send in the instructions:
> "dump 0x003f7670 128 C:/Dump/atl.dat"
> "go".
>
> Based on ur suggestion I modified the code to (also attached):
> -------------------------------------
> class RBDI_test
>
>  attr_accessor :quiet
>
>  def initialize(options)
>    @prompt = /- TARGET: stopped \n BDI>|BDI>/
>    @quiet = options['Quiet']
>    @quiet = true if @quiet.nil?
>
>    @connection = Net::Telnet.new({'Host'   => options['Host'],
>                                   'Prompt' => @prompt}) {|str| print
> str unless @quiet}
>
>    # consume the initial display of help
>    @connection.waitfor(@prompt) {|str| print str unless @quiet}
>  end
>
>  # Send a script of commands to the BDI
>  # If script is a filename, the commands will be read from the file.
>  # The Quiet option specified at creating may be overruled for this
> script.
>  def send(script, options={'Quiet' => @quiet})
>    script = File.new(script) if FileTest.file? script
>
>    begin
>      script.each_line do |command|
>        @connection.cmd(command.strip) do |str|
>          print str unless str.nil? or options['Quiet']
>        end
>      end
>    rescue Errno::ECONNRESET, Errno::ECONNABORTED
>      puts "Connection closed" unless options['Quiet']
>      return
>    end
>  end
>
> end
> ------------------------
> AND
> ----------
> require 'rbdi_test'
>
> bdi = RBDI_test.new({'Host'  => 'bdiemul'})
> bdi.quiet = false
>
> bdi.send("Prompt"=>/BDI>/) <<-LOAD_SCRIPT
> re
> ci
> bi 0x000044bc
> go 0
> LOAD_SCRIPT
>
> j = true
>
> while j
>
> bdi.send("Prompt"=>/- TARGET: stopped \n BDI>/) <<-LOAD_SCRIPT
> dump 0x003f7670 128 C:Dump/atl.dat
> go
> LOAD_SCRIPT
>
> end
>
> sleep 1
> -------------------------
>
> I end up with the error:
> C:/load565-released/test.rb:18: syntax error, unexpected tINTEGER,
> expecting kEND
> dump 0x003f7670 128 C:Dump/atl.dat
>
> Amogh.
>                   ^
>
>
>
>
> Attachments:
> http://www.ruby-forum.com/attachment/3903/test.zip
>
> -- 
> Posted via http://www.ruby-forum.com/.
>