如何在Ruby expect脚本中使用条件
我正在使用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
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