【发布时间】:2015-08-24 21:41:49
【问题描述】:
这不应该那么复杂,但似乎 Ruby 和 Python Telnet 库都有笨拙的 API。谁能告诉我如何向 Telnet 主机写入命令,然后将响应读入字符串以进行某些处理?
在我的例子中,带有换行符的“SEND”会检索设备上的一些温度数据。
我尝试使用 Python:
tn.write(b"SEND" + b"\r")
str = tn.read_eager()
什么都不返回。
我在 Ruby 中尝试过:
tn.puts("SEND")
这也应该返回一些东西,我唯一要做的就是:
tn.cmd("SEND") { |c| print c }
c 无能为力。
我在这里遗漏了什么吗?我期待 Ruby 中的 Socket 库之类的代码,例如:
s = TCPSocket.new 'localhost', 2000
while line = s.gets # Read lines from socket
puts line # and print them
end
【问题讨论】:
-
虽然您可以通过 Telnet 进行非常基本的握手,但您确实需要使用类似“expect”的库来为您提供对意外响应和/或长时间延迟和超时做出反应的能力。请参阅stackoverflow.com/q/7142978/128421 以获取 Ruby“预期”建议。
-
所以我查看了一些用于 python 和 ruby 的期望库,似乎它们具有与 telnet 库类似的设置。就我的应用程序而言,pexpect.expect() 是否与 telnetlib.wait_until() 相同?
-
另一件事是我不想期待响应,我想将响应加载到变量中。如果找到匹配项,这些库上的 expect 方法似乎只返回一个索引。
-
期望库允许您捕获结果。他们必须为了对您连接到的主机的响应进行子字符串和正则表达式匹配,然后才能匹配 CLI 提示等。
标签: python ruby telnet telnetlib