System
Die systemMethode 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, STDOUTund STDERRObjekte Ihrer Ruby - Programm. In der Tat ist der tatsächliche Rückgabewert entweder true, falseoder nil. Im Beispiel wurde das Datum über das E / A-Objekt von gedruckt STDIN. Die Methode wird zurückgegeben, truewenn der Prozess mit einem Nullstatus beendet wurde, falsewenn der Prozess mit einem Status ungleich Null beendet wurde und nilwenn die Ausführung fehlgeschlagen ist.
Ein weiterer Nebeneffekt ist, dass die globale Variable $?auf ein Process::StatusObjekt 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 %xist eine Alternative zum Backticks-Stil. Es wird auch die Ausgabe zurückgeben. Wie seine Verwandten %wund %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.popen3praktisch:
require 'open3'
Open3.popen3("curl http://example.com") do |stdin, stdout, stderr, thread|
pid = thread.pid
puts stdout.read.chomp
end