Как получить содержимое стандартного вывода, пока еще жив? - PullRequest
0 голосов
/ 04 октября 2019

Я столкнулся с проблемой, когда я знаю, когда я закончил чтение из stdout, но где я не могу гарантировать, что он не породил дочерний процесс, который держит канал io открытым.

Я пытался непрерывно вводить stdout.gets в строку, но мой сценарий всегда будет зависать, ожидая получения другого после того, как родитель был убит. Закрытие потока через другой поток приводит к возникновению ошибки в цикле get после того, как он пытается завершить свою последнюю gets, и я нигде не могу найти, как бы полезным образом использовать flush или sync=true.

Open3.popen3("test-runner") do |stdin, stdout, stderr, wait_thr|
  while wait_thr.alive?
    @output += stdout.gets
  end
end
...