2009-10-30 11 views
8

Escenario:Captura stdout y stderr de un programa externo * mientras * está ejecutando (Rubí)

Tengo que llamar a un programa externo de mi script Ruby, y este programa envía una gran cantidad de útiles (pero críptica) info a stdout y stderr.

Mientras que el programa se está ejecutando, me gustaría analizar las líneas que envía a stdout y stderr y:

  • eliminarlos si no es necesario formatear
  • /reemplazarlos si es necesario

probé todos los trucos habituales (del sistema, ejecutivo, popen, popen3, acentos abiertos, etc, etc), pero sólo puedo recuperar stdout/stderr después se ejecuta el programa, no durante su ejecución.

¿Alguna idea?

Ah, y estoy en Windows :-(

+0

¿puede dar un ejemplo de uno de sus 'trucos' (digamos, popen) –

+0

supongo windows no tiene tuberías –

+0

@jug:?? las ventanas tienen tubos perfectamente válidas. –

Respuesta

14

En realidad, era más sencillo de lo que pensaba, esto parece funcionar perfectamente:

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 

... y sí, funciona en ! ventanas

Cuestiones relacionadas