2017-06-05 57 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'紅寶石庫 –

相關問題