2013-10-30 51 views
0

我使用Ruby和我有-ING SSH到路由器和運行一系列命令存儲在一個arrary下面的代碼:紅寶石:從PTY master_io閱讀掛

result = PTY.open do |masterIO, slaveFile| 
    r, w = IO.pipe 

    slaveFile.raw!  
    pid = spawn(sshCommand, :in=>r, :out=>slaveFile) 
    r.close; slaveFile.close; 

    output = "" 
    @commands.each do |subCommand| 
     w.puts subCommand 
     masterIO.each_line { |line| output += line } 
    end 
    next ouput 
end 

我的問題是masterIO.each_line { ... }永遠掛起。在上面的代碼中,我認爲我需要關閉w,但是我仍然不確定如何編寫它以使其行爲像我想要的那樣。

注意:您必須記住子命令不是即時的,所以我需要一些等待,直到第一個命令完成執行,然後再寫第二個命令。

編輯:

我想我可以只CONCAT所有 '& &' 每個之間的命令。這將允許我順序運行它們,但我仍然不確定如何使這些命令的輸出成功讀取

回答

0

爲什麼不能使用net/ssh lib?

require 'net/ssh' 

Net::SSH.start('ip', 'user', password: 'your_password') do |ssh| 
    @commands.each {|command| ssh.exec(command)} 
end 
+0

我不知道它存在,我不認爲看((: –