Я столкнулся с проблемой, когда я знаю, когда я закончил чтение из 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