2015-04-17 42 views
2

我在Ruby中玩弄期望,但是我基于我登录到的设备的行为来分支我的代码有点遗憾。如果我在>以下得到正确的提示,但是如果我不知道运行foo.fail,我怎么能说foo.run?更进一步,我如何评估输入密码和接收>提示之间返回的所有文本?有没有办法查看设备打印的所有文本?如何在Ruby期望脚本中使用条件

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 

回答

1

看起来expect方法只能查找单个模式(与Tcl expect库不同,您可以同时查找多个模式)。

它看起来像你必须通过一个“超时”参数,并检查返回值:

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