Puede ejecutar la llamada al sistema como éste:
`sleep --help`
O como este caso
system "sleep --help"
O
%x{ sleep --help }
En de system
se imprimirá de salida y retorno true
o nil
, otros dos métodos devolverán la salida
PS Oh. Se trata de mostrar en tiempo real.
So. Usted podría utilizar algo como esto:
system("ruby", "-e 100.times{|i| p i; sleep 1}", out: $stdout, err: :out)
Para imprimir los datos en tiempo real y lo almacena en la variable:
output = []
r, io = IO.pipe
fork do
system("ruby", "-e 3.times{|i| p i; sleep 1}", out: io, err: :out)
end
io.close
r.each_line{|l| puts l; output << l.chomp}
#=> 0
#=> 1
#=> 2
p output
#=> ['0', '1', '2']
o uso popen
output = []
IO.popen("ruby -e '3.times{|i| p i; sleep 1}'").each do |line|
p line.chomp
output << line.chomp
end
#=> '0'
#=> '1'
#=> '2'
p output
#=> ['0', '1', '2']
Conozco esas formas de ejecutar un comando, ninguna captura la salida en una cadena y la genera al mismo tiempo. – Pablo
Lo entiendo ahora mismo :) va a actualizar una respuesta) – fl00r
@ J.PabloFernández, actualización de compra – fl00r