【问题标题】:Telnet not valid when opening command prompt with Ruby使用 Ruby 打开命令提示符时 Telnet 无效
【发布时间】:2017-11-06 12:20:59
【问题描述】:

当我手动打开命令提示符并键入以下命令时,我会收到来自我正在 ping 的服务器的响应。

telnet <server> <port>

当我使用 Ruby 打开命令提示符时,使用以下命令,并运行上面相同的 telnet 命令,我得到“telnet”不是内部或外部命令、可运行程序或批处理文件。'

Ruby 命令:

system('start cmd.exe)

它可以很好地打开提示,但命令本身不起作用,我不确定这是为什么。

【问题讨论】:

  • 你需要对我说得更具体一些。 cmd.exe 经营什么?你是如何调用命令或启动 ruby​​ 的?你能把这个问题分解成更小的步骤吗?如果你打开一个irb 实例并在那里输入你的命令呢?
  • 当我运行 system('start cmd.exe') 时,它正在执行命令提示符可执行文件(打开命令提示符)。然后我在使用上一个命令打开的命令提示符中手动输入 telnet 命令,我看到了错误消息

标签: ruby shell telnet


【解决方案1】:

一些好的后续步骤是:

  • 使用WHERE 定位telnet.exe,然后使用telnet.exe 的路径调用system
  • 我建议不要使用system,而是使用Open3.popen3(),这样您就可以通过STDINSTDOUTSTDERR 与实际的telnet 程序进行交互。
  • 最后,我建议您使用net-telnet,而不是上述任何选项,因为它公开了一个更易于使用的API,而不是封装Windows Telnet 客户端。

【讨论】:

  • 感谢大卫的回复。我无法从 Ruby 中执行 telnet.exe ......但我确实使用了你提到的 net-telnet gem,它能够做我需要的事情。谢谢!
【解决方案2】:

cmd.exe 不在您运行 irb 的位置(或任何您的 ruby​​ shell。

您需要将完整路径传递给cmd.exe,包括任何illegal path characters 的转义,例如C:\some\folder\path\to\cmd.exe

system('start C:\some\folder\path\to\cmd.exe')

【讨论】:

  • 不要在双引号字符串中使用反斜杠。您正在询问问题,因为几个反斜杠+字母组合被解释为转义字符。相反,做简单的事情并使用正斜杠,让 Ruby 为您处理它们。 "\some\folder\path\to\cmd.exe" # =&gt; " ome\folderpath\to\rd.exe"
  • 我已经尝试使用以下命令的完整路径:system("start C:/\Windows/\System32/\/cmd.exe") 按预期打开提示,但又一次, telnet 问题依然出现
  • @aswerlein511 当然,那么您需要按照 David S 的解决方案进行调试,使用 Open3 ruby​​ lib
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-05
  • 2011-07-29
  • 2018-01-04
  • 2022-06-20
  • 1970-01-01
相关资源
最近更新 更多