首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Ruby和telnet: waitfor不起作用

Ruby和telnet: waitfor不起作用
EN

Stack Overflow用户
提问于 2013-06-11 22:41:18
回答 1查看 1.1K关注 0票数 2

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

代码语言:javascript
复制
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不起作用。下面是output_log:

代码语言:javascript
复制
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 time错误。我做错了什么?

EN

回答 1

Stack Overflow用户

发布于 2019-06-27 08:07:59

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

您应该等待连接建立(在创建Telnet实例时发生),然后在发送下一条命令之前等待服务器每次响应。

代码语言:javascript
复制
        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服务器的设计)。然后,确保为您的匹配设置正确的正则表达式。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17046915

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档