如何在 Ruby 期望脚本中使用条件
How to use a conditional within a Ruby expect script
我在 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" 参数并检查 return 值:
if reader.expect(">", 2)
puts "foo.run"
else
# did not see ">" within 2 seconds
puts "foo.fail
end
我在 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" 参数并检查 return 值:
if reader.expect(">", 2)
puts "foo.run"
else
# did not see ">" within 2 seconds
puts "foo.fail
end