pipe = IO.popen('./myblockingprogram')
while line = pipe.gets
puts "hello world"
end
, где myblockingprogram
- это некоторая программа, которая блокирует получение данных по сети, а затем печатает некоторый текст на стандартный вывод.Протестированный запуск его из bash напрямую работает отлично.
Однако, когда я запускаю программу выше, я никогда не вижу строк "hello world", напечатанных на stdout (консоль).Я ошибаюсь, что popen запускает совершенно новый процесс ... и поэтому, хотя он и выполняет блокирующий вызов, он не должен препятствовать запуску основной программы ruby из-за некоторой глобальной блокировки интерпретатора?
Есть ли лучший способчтобы структурировать программу, подобную этой, где я хочу прочитать текстовые строки, выведенные другой программой, и обработать результаты каким-либо образом (нет завершающего условия, оно может выполняться вечно)?