如何在Ruby expect脚本中使用条件

如何在Ruby expect脚本中使用条件,ruby,expect,Ruby,Expect,我正在使用Ruby中的expect,但对于如何根据我登录的设备的行为来分支代码,我有点不知所措。如果我得到下面的正确提示,我怎么能说foo.run,,但是如果我没有得到正确提示,我怎么能说运行foo.fail?更进一步,我如何评估在输入密码和收到提示之间返回的所有文本?有没有办法查看设备以某种方式打印的所有文本 def device_test(password) $expect_verbose = true PTY.spawn("ssh my-router") do

我正在使用Ruby中的expect,但对于如何根据我登录的设备的行为来分支代码,我有点不知所措。如果我得到下面的正确提示,我怎么能说
foo.run
,但是如果我没有得到正确提示,我怎么能说运行
foo.fail
?更进一步,我如何评估在输入密码和收到
提示之间返回的所有文本?有没有办法查看设备以某种方式打印的所有文本

   def device_test(password)
      $expect_verbose = true
      PTY.spawn("ssh my-router") do |reader, writer, pid|
         reader.expect("password:")
         writer.puts(password)
         reader.expect(">")        
         puts "logged in"
         sleep(15)
      end
   end

expect方法似乎只能查找单个模式(不像Tcl expect库可以同时查找多个模式)

看起来您必须传递一个“timeout”参数并检查返回值:

if reader.expect(">", 2)
  puts "foo.run"
else
  # did not see ">" within 2 seconds
  puts "foo.fail
end