Захват STDOUT и STDERR внешней программы * во время * ее выполнения (Ruby) - PullRequest
9 голосов
/ 30 октября 2009

Сценарий:

Мне нужно вызвать внешнюю программу из моего сценария Ruby, и эта программа отправляет много полезной (но загадочной) информации в stdout и stderr.

Пока программа работает , я бы хотел проанализировать строки, которые она отправляет в stdout и stderr и:

  • Удалите их, если не нужно
  • Переформатируйте / замените их при необходимости

Я испробовал все обычные приемы (system, exec, popen, popen3, backticks и т. Д. И т. Д.), Но я могу получить только stdout / stderr после выполнения программы, а не во время его исполнения.

Есть идеи?

О, и я на Windows: - (

1 Ответ

15 голосов
/ 03 ноября 2009

На самом деле, это было проще, чем я думал, кажется, это работает отлично:

STDOUT.sync = true # That's all it takes...
IO.popen(command+" 2>&1") do |pipe| # Redirection is performed using operators
  pipe.sync = true
  while str = pipe.gets
    puts "-> "+str # This is synchronous!
  end
end

... и да, это работает на Windows!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...