Estoy trabajando en un script que usa IO.popen para abrir otro programa y leer continuamente los datos. Es como esto:Ruby IO.popen STDOUT buffering
process = IO.popen(["/the/program", "argument", "argument"])
loop do
line = process.gets
puts "#{line}"
end
(en realidad el programa hace algo más que la impresión de la salida, obviamente, - eso es sólo un ejemplo.)
El problema que estoy corriendo en es que popen parece estar amortiguando STDOUT del proceso abierto. Lo he confirmado ejecutando el programa directamente desde un shell y pasando por popen, uno al lado del otro, y el Ruby nunca recibe una línea a la vez. Siempre obtiene múltiples líneas a la vez, y se retrasa.
He intentado
STDOUT.sync = true
... antes de popen, pero que no ha cambiado nada.
El programa en cuestión definitivamente está usando \ n como una nueva línea, por lo que ese no es el problema.
¿Ha intentado 'process.sync = true'? – DNNX
@ Eddie, ¿te diste cuenta de esto? –