Ruby:从PTY master_io挂起读取

时间:2013-10-30 04:09:11

标签: ruby pty

我正在使用Ruby,我有以下代码用于ssh-ing到路由器并运行存储在arrary中的一系列命令:

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,但我仍然不确定如何编写它以使其表现得像我想要的那样。

注意:你必须记住子命令不是即时的,所以在写第二个命令之前,我需要一些等待,直到第一个命令完成执行。

编辑:

我想我可以用'&&'来连接所有命令每个之间。这将允许我按顺序运行它们,但我仍然不确定如何使这些命令的输出成功读取

1 个答案:

答案 0 :(得分:0)

为什么你不能使用net / ssh lib?

require 'net/ssh'

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