2012-06-06 6 views
10

Wie einfach ist es, Ergebnisse von Systembefehlen in Ruby zu verbergen? Zum Beispiel laufen einige meiner Skriptsversteckt Systembefehl Ergebnisse in Ruby

system "curl ..." 

und ich würde nicht gerne die Ergebnisse des Downloads sehen.

Danke!

+3

Beachten Sie, dass bereits curl einen '--silent' Modus hat Sie verwenden können. – Phrogz

+0

Genau das habe ich gebraucht. Vielen Dank! – dejay

+0

mögliches Duplikat von [Unterdrücken der Ausgabe eines Befehls, der mit der Methode 'system' ausgeführt wird, während es in einem Ruby-Skript ausgeführt wird] (http://stackoverflow.com/questions/1960838/suppressing-the-output-of-a-command- run-using-system-method-while-running-it-i) –

Antwort

8

können Sie verwenden, um die anspruchsvolleren popen3 Kontrolle über STDIN, STDOUT und STDERR getrennt zu haben, wenn man so will:

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

Wenn Sie bestimmte Ströme zum Schweigen zu bringen wollen, um sie zu ignorieren, oder wenn es wichtig ist, die Umleitung oder interpretieren Sie diese Ausgabe, Sie haben immer noch verfügbar.

+3

Möglicherweise müssen Sie "open3 'anfordern". Verwenden Sie "myvarname = stdin.read", wenn Sie die Ausgabe verarbeiten möchten. – DanielaWaranie

+0

Um erweiterte Ausgaben wie stdin, stderr usw. zu verwenden, ist es in Ordnung, aber nur um die Ausgabe der Konsole zu erhalten, ist es eine Abhängigkeit, die z. '% x {bash-Befehl arg1 arg2}' – siegy22

+0

@RaVeN Ein Vorteil von 'popen3' oder' system' ist, dass Sie Argumente richtig austeilen können: 'system (" example "," --file ", user_supplied_filename)' ist sicher von Shell-Injektion. 'system (" Beispiel --file # {user_supplied_filename} ")' ist ** extrem gefährlich ** und sollte nicht gemacht werden. – tadman

2

Die einfachste ist stdout zu umleiten :)

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

Easiest auf andere Weise als popen:

  1. Use% x statt System. Es wird automatisch Rohr

    rval = %x{curl ...}  #rval will contain the output instead of function return value 
    
  2. manuell Rohr/dev/null. Arbeiten in UNIX wie System Windows nicht

    system "curl ... > /dev/null" 
    
Verwandte Themen