System
Die system
Methode ruft ein Systemprogramm auf. Sie müssen den Befehl als Zeichenfolgenargument für diese Methode angeben. Zum Beispiel:
>> system("date")
Wed Sep 4 22:03:44 CEST 2013
=> true
Das aufgerufene Programm wird die aktuelle verwenden STDIN
, STDOUT
und STDERR
Objekte Ihrer Ruby - Programm. In der Tat ist der tatsächliche Rückgabewert entweder true
, false
oder nil
. Im Beispiel wurde das Datum über das E / A-Objekt von gedruckt STDIN
. Die Methode wird zurückgegeben, true
wenn der Prozess mit einem Nullstatus beendet wurde, false
wenn der Prozess mit einem Status ungleich Null beendet wurde und nil
wenn die Ausführung fehlgeschlagen ist.
Ein weiterer Nebeneffekt ist, dass die globale Variable $?
auf ein Process::Status
Objekt festgelegt ist. Dieses Objekt enthält Informationen zum Aufruf selbst, einschließlich der Prozesskennung (PID) des aufgerufenen Prozesses und des Beendigungsstatus.
>> system("date")
Wed Sep 4 22:11:02 CEST 2013
=> true
>> $?
=> #<Process::Status: pid 15470 exit 0>
Backticks
Backticks (``) rufen ein Systemprogramm auf und geben dessen Ausgabe zurück. Im Gegensatz zum ersten Ansatz wird der Befehl nicht über eine Zeichenfolge bereitgestellt, sondern durch Einfügen in ein Backtick-Paar.
>> `date`
=> Wed Sep 4 22:22:51 CEST 2013
Die globale Variable $?
wird auch über die Backticks festgelegt. Mit Backticks können Sie auch die String-Interpolation verwenden.
% x ()
Die Verwendung %x
ist eine Alternative zum Backticks-Stil. Es wird auch die Ausgabe zurückgeben. Wie seine Verwandten %w
und %q
(unter anderem) wird jedes Trennzeichen ausreichen, solange Trennzeichen im Klammerstil übereinstimmen. Dieses Mittel %x(date)
, %x{date}
und %x-date-
sind alle Synonyme. Wie Backticks%x
können die String-Interpolation nutzen.
exec
Durch die Nutzung Kernel#exec
des aktuellen Prozesses (Ihr Ruby-Skript) wird der durch aufgerufene Prozess ersetzt exec
. Die Methode kann eine Zeichenfolge als Argument verwenden. In diesem Fall wird die Zeichenfolge einer Shell-Erweiterung unterzogen. Wenn Sie mehr als ein Argument verwenden, wird das erste zum Ausführen eines Programms verwendet, und die folgenden Argumente werden als Argumente für das aufzurufende Programm bereitgestellt.
Open3.popen3
Manchmal werden die erforderlichen Informationen in Standardeingaben oder Standardfehler geschrieben, und Sie müssen auch die Kontrolle darüber erlangen. Hier ist Open3.popen3
praktisch:
require 'open3'
Open3.popen3("curl http://example.com") do |stdin, stdout, stderr, thread|
pid = thread.pid
puts stdout.read.chomp
end