2012-06-06 64 views
10

¿Qué tan fácil es ocultar los resultados de los comandos del sistema en ruby? Por ejemplo, algunos de mis scripts ejecutanocultar los resultados del comando del sistema en ruby ​​

system "curl ..." 

y no me gustaría ver los resultados de la descarga.

Gracias!

+3

Tenga en cuenta que ya la curvatura tiene un modo de '--silent' que puede utilizar. – Phrogz

+0

Eso es exactamente lo que necesitaba. ¡Gracias! – dejay

+0

posible duplicado de [Supresión de la salida de un comando ejecutado usando el método 'sistema' mientras se ejecuta en un script de ruby] (http://stackoverflow.com/questions/1960838/suppressing-the-output-of-a-command- run-using-system-method-while-running-it-i) –

Respuesta

8

Puede utilizar la más sofisticada popen3 tener control sobre STDIN, STDOUT y STDERR separado si te gusta:

Open3.popen3("curl...") do |stdin, stdout, stderr, thread| 
    # ... 
end 

Si desea silenciar ciertas corrientes se puede pasar por alto, o si es importante para redirigir o interpretar ese resultado, todavía lo tiene disponible.

+3

Es posible que necesite "requerir" open3 '". Use "myvarname = stdin.read" si quiere procesar el resultado. – DanielaWaranie

+0

Para usar salidas avanzadas como stdin, stderr, etc., está bien, pero solo para obtener el resultado de la consola es una dependencia que se puede eliminar con, por ejemplo, '% x {bash-command arg1 arg2}' – siegy22

+0

@RaVeN Una de las ventajas de 'popen3' o' system' es que puedes dividir correctamente los argumentos: 'system (" example "," --file ", user_supplied_filename)' es seguro de la inyección de cáscara. 'system (" example --file # {user_supplied_filename} ")' es ** extremadamente peligroso ** y no debe hacerse. – tadman

2

La más simple es para redirigir la salida estándar :)

system "curl ... 1>/dev/null" 
# same as 
`curl ... 1>/dev/null` 
5

maneras más fáciles que otros popen:

  1. Uso% x en lugar de sistema. Lo hará automáticamente tubería

    rval = %x{curl ...}  #rval will contain the output instead of function return value 
    
  2. tubería manualmente a/dev/null. Trabajando en UNIX como sistema, no de Windows

    system "curl ... > /dev/null" 
    
Cuestiones relacionadas