Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby和telnet:waitfor不起作用_Ruby_Timeout_Telnet - Fatal编程技术网

Ruby和telnet:waitfor不起作用

Ruby和telnet:waitfor不起作用,ruby,timeout,telnet,Ruby,Timeout,Telnet,我需要使用Ruby和Telnet登录服务器,并执行一些命令。我的实际脚本是: tn = Net::Telnet::new("Host" => "#{ip}", "Port" => 23, "Timeout" => 60, "Output_log"=>"output_log.log", "Dump_log"=> "dump_log.log", "Prompt" => /[#]/ ) tn.cmd("#{USER}\n#{PAS

我需要使用Ruby和Telnet登录服务器,并执行一些命令。我的实际脚本是:

tn = Net::Telnet::new("Host" => "#{ip}", "Port"  => 23, "Timeout" => 60, 
     "Output_log"=>"output_log.log",
     "Dump_log"=> "dump_log.log",
     "Prompt" => /[#]/ )

tn.cmd("#{USER}\n#{PASS}") { |c| print c }

puts tn.cmd("Conf")
tn.waitfor(/config/) { |str| puts str }
puts tn.cmd("Int fa23")

puts tn.cmd("Shut")
puts tn.cmd("No shut")
puts tn.cmd("Exit")

tn.close
在输出中找到字符串“config”后,我必须只执行第二个命令(
Int fa23
)。问题是waitfor不起作用。以下是输出日志:

Trying XX.XX.XX.XX...
Connected to XX.XX.XX.XX.
User Name:username
Password:*************
BOT-SWT-VSAT-AL-...#Conf
BOT-SWT-VSAT-AL-...(config)#

脚本停止时出现waitfor超时错误。我做错了什么?

请在Net::Telnet::new之后添加waitfor

您应该等待连接建立(创建Telnet实例时会发生这种情况),然后等待服务器每次都响应,然后再发送下一个命令

        localhost = Net::Telnet::new("Host" => "*****",
                         "Port" => ***, 
                         "Timeout" => 10,
                         "Prompt" => /[$%#>] \z/n)
        localhost.waitfor(/USER/) {
           localhost.cmd("****") { 
              localhost.waitfor(/PASS/) {
                  |c| print c
                  # your next commands
                  ...
                  # localhost.close
              }
           }
        }
这里的关键是确保您在回复之前已从服务器接收到所有数据包(直到收到EOF)。有时,甚至使用/等待空格字符也可能算数(取决于telnet服务器的设计方式)。
然后,确保为匹配设置正确的正则表达式。

这是一个非常有趣的脚本。我想,我的问题是你的问题:你如何获取输出?或者,也许你只需要处理日志。。。