用于telnet切换的Ruby脚本

我创建了以下ruby脚本telnet到Cisco设备,telnet到Cisco设备并运行命令’show int status err’。

require 'net/telnet' C3550_20_PterraEst = "192.168.244.20" #Enter the IP address here USER = "user" #Enter username here PASS = "password" #Enter password here ENABLE = "password" #Enter enable password here print "Selezionare il piano [0-1-2-All]: "; # get the input from the console, val1 = gets; tn = Net::Telnet::new("Host" => C3550_20_PterraEst, "Timeout" => 5, "Prompt" => /Username/ ) tn.cmd("\n#{USER}") tn.cmd(PASS) tn.cmd("sh int status err\n") { |c| print c } exit 

现在我希望那些Cisco设备输出(当我发送’show int status err’时)应该分配给我的脚本中的变量…我会更好地解释:

假设命令’show int status err’返回此值:

Int fa0 / 20 Int fa0 / 25

我想做一些诸如… variable1 =’Int fa0 / 20,Int fa0 / 25’以及稍后在我的脚本中使用variable1。

以女巫的方式我可以吗?

我想你想做的不是:

 tn.cmd("sh int status err\n") { |c| print c } 

反而:

 response = tn.cmd("sh int status err\n") 

根据NET :: Telnet上的文档,Telnet#cmd返回响应。 如果你传递一个块它也会产生对块的响应,但如果你想将响应存储在一个变量中,我的例子是最好的方法。

如果你还要打印出对STD的响应,你应该能够做到这两点,如下所示:

 response = tn.cmd("sh int status err\n") { |c| print c } 

但是,如果tn.cmd(“sh int status err \ n”){| c | print c}给你一个错误,我的解决方案可能无法工作,直到你弄清楚它为什么会产生错误。 如果您想要帮助进行故障排除,则应将其添加到评论中。

尽管如此,如果您希望让脚本生成其他命令以响应telnet响应,您可能需要查看使用[expect][1]

在这一行tn.cmd("sh int status err\n") { |c| print c } tn.cmd("sh int status err\n") { |c| print c } c是命令返回的值,但因为它是该块的本地变量。 您可以使用实例变量来包含它,这将允许您在块外使用它。

Interesting Posts