Как получить STDOUT системного вызова ruby ​​во время его выполнения? - PullRequest
9 голосов
/ 29 ноября 2010

Аналогично Получая выходные данные вызовов system () в Ruby , я выполняю системную команду, но в этом случае мне нужно вывести STDOUT из команды при ее запуске.

Ответы [ 2 ]

13 голосов
/ 29 ноября 2010

Как и в связанном вопросе, ответ снова не использовать system, поскольку system не поддерживает это.

Однако на этот раз решение не использовать backticks,но IO.popen, который возвращает объект ввода-вывода, который можно использовать для чтения ввода по мере его создания.

0 голосов
/ 08 ноября 2017

вот мое решение

def io2stream(shell, &block)
  Open3.popen3(shell) do |_, stdout, stderr|
    while line = stdout.gets
      block.call(line)
    end

    while line = stderr.gets
      block.call(line)
    end
  end
end

io2stream("ls -la", &lambda { |str| puts str })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...