来自 Ruby 的重复响应 - Telnet 连接?
Duplicate response from Ruby - Telnet connection?
我正在尝试实施一个解决方案来输入 API 命令并通过 Telnet 将其传输到硬件设备并捕获响应。我尝试了两种不同的 Telnet 实现,一种使用 Net/SSH,另一种使用 Greenletters gem,在这两种情况下我都可以成功检索到响应,但我得到的输出被发回两次。
test = Greenletters::Process.new("telnet #{@dev_one_ip} #{@port}", :timeout => 5, :transcript => $stdout)
test.start!
test << "<test cmd>\n"
test.wait_for(:output, /(response one)(response two)/)
Expected output:
<test cmd>
Trying 192.168.1.127...
Connected to 192.168.1.127.
Escape character is '^]'.
(response one)(response two)
Actual output:
<test cmd>
Trying 192.168.1.127...
Connected to 192.168.1.127.
Escape character is '^]'.
(response one)(response two)(response one)(response two)
我在两种实现中都看到了这种行为,所以我怀疑这是 Telnet 逻辑本身的问题,但我无法弄清楚问题出在哪里。我可以通过单独的连接登录并确认输出仅返回一次,尽管它与我的脚本重复。
我还注意到,如果我用另一个命令跟进这个命令,那么第二个命令似乎根本没有执行,脚本中没有响应,也没有到达设备,我可以通过单独连接。
谢谢大家!
我能够为面临此问题的任何其他人找到解决方案。我不得不回到最初的 Net/Telnet 实现并使用可选的 "waittime" 参数。我为它定义了一个值,它开始捕获整个输出。
我正在尝试实施一个解决方案来输入 API 命令并通过 Telnet 将其传输到硬件设备并捕获响应。我尝试了两种不同的 Telnet 实现,一种使用 Net/SSH,另一种使用 Greenletters gem,在这两种情况下我都可以成功检索到响应,但我得到的输出被发回两次。
test = Greenletters::Process.new("telnet #{@dev_one_ip} #{@port}", :timeout => 5, :transcript => $stdout)
test.start!
test << "<test cmd>\n"
test.wait_for(:output, /(response one)(response two)/)
Expected output:
<test cmd>
Trying 192.168.1.127...
Connected to 192.168.1.127.
Escape character is '^]'.
(response one)(response two)
Actual output:
<test cmd>
Trying 192.168.1.127...
Connected to 192.168.1.127.
Escape character is '^]'.
(response one)(response two)(response one)(response two)
我在两种实现中都看到了这种行为,所以我怀疑这是 Telnet 逻辑本身的问题,但我无法弄清楚问题出在哪里。我可以通过单独的连接登录并确认输出仅返回一次,尽管它与我的脚本重复。
我还注意到,如果我用另一个命令跟进这个命令,那么第二个命令似乎根本没有执行,脚本中没有响应,也没有到达设备,我可以通过单独连接。
谢谢大家!
我能够为面临此问题的任何其他人找到解决方案。我不得不回到最初的 Net/Telnet 实现并使用可选的 "waittime" 参数。我为它定义了一个值,它开始捕获整个输出。