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