können Sie verwenden Process.spawn
und Process.wait2
:
pid = Process.spawn 'your.exe', '--option'
# Later...
pid, status = Process.wait2 pid
Ihr Programm wird als Kindprozess des Interpreters ausgeführt werden. Außerdem verhält es sich so, als wäre es von der Befehlszeile aus aufgerufen worden.
Sie können auch Open3.popen3
verwenden:
require 'open3'
*streams, thread = Open3.popen3 'your.exe', '--option'
# Later...
streams.each &:close
status = thread.value
Der wesentliche Unterschied ist, dass Sie den Zugriff auf drei IO
Objekte zu bekommen. Die Standardeingabe-, -ausgabe- und -fehlerströme des Prozesses werden in dieser Reihenfolge an sie weitergeleitet.
Dies ist großartig, wenn Sie beabsichtigen, die Ausgabe des Programms zu konsumieren oder über den Standard-Eingabestrom mit ihm zu kommunizieren. Text, der normalerweise auf einem Terminal gedruckt wird, wird stattdessen Ihrem Skript zur Verfügung gestellt.
Sie erhalten auch einen Thread, der auf die Ausführung des Programms wartet, was bequem und intuitiv ist.