我创建了以下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。
以女巫的方式可以吗?
答案 0 :(得分:1)
我认为你想做的不是:
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]
。
答案 1 :(得分:0)
在这一行tn.cmd("sh int status err\n") { |c| print c }
c是命令返回的值,但因为它是一个局部变量,它存在于该块中。您可以使用instance variable来包含它,这将允许您在块外使用它。