2017-06-05 60 views
0

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

telnet <server> <port> 

当我打开用Ruby命令提示,使用下面的命令,并运行上述相同的telnet命令,我得到“”的telnet”不被识别为内部或外部命令,可操作的程序或批处理文件“。

红宝石命令:

system('start cmd.exe) 

它打开了提示罚款,但命令本身不工作,我不知道到这是为什么。

+2

你需要我更加具体。什么是'cmd.exe'?您是如何调用命令或启动红宝石运行?你能分解这个问题分成更小的步骤是什么?如果什么你开一个' irb“实例并输入你r命令在那里? – Puhlze

+0

当我运行系统('start cmd.exe')时,它正在执行命令提示符可执行文件(以打开命令提示符)。然后我在用前面的命令打开的命令提示符中手动输入telnet命令,然后我看到错误消息 – aswerlein511

回答

3

一些好的接下来的步骤是:

  • 使用WHERE找到telnet.exe,然后用路径调用systemtelnet.exe
  • 而不是system,我建议使用Open3.popen3(),以便您可以通过STDIN,STDOUTSTDERR与实际的telnet程序进行交互。
  • 最后,而不是上述任何选项,我建议您使用net-telnet,因为它暴露了一个更简单的API使用与包装Windows Telnet客户端。
+1

感谢David的回应。我无法从Ruby内部执行telnet.exe,但我确实使用了您提到的net-telnet gem,并且能够执行我所需的操作。谢谢! – aswerlein511

0

cmd.exe不位于从已运行irb(或者是你的Ruby外壳的地方。

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

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

请勿在双引号字符串中使用反斜线。由于几个反斜杠+字母组合被解释为转义字符,因此您会问题。相反,做简单的事情并使用正斜杠并让Ruby为您处理它们。 '“\ some \ folder \ path \ to \ cmd.exe”#=>“ome \ folderpath \ to \ rd.exe” –

+1

我已经尝试使用以下命令的完整路径: system(“start C :/ \ Windows/\ System32/\/cmd.exe“) ,按预期打开提示,但同样,telnet问题仍然出现 – aswerlein511

+0

@ aswerlein511肯定,那么您需要遵循David S的解决方案, 'Open3'红宝石库 –

相关问题