2012-04-10 5 views
5

exe ​​sollte laufen, wenn ich die Seite öffne. Asynchroner Prozess muss ausgeführt werden.Wie führe ich eine Exe asynchron mit zwei Argumenten in Ruby aus?

Gibt es eine Möglichkeit zum Ausführen exe asynchron mit zwei Argumenten in Ruby?

Ich habe Ruby-Befehle - system(), exec() versucht, aber es wartet den Prozess abgeschlossen. Ich brauche exe mit Parameter zu starten keine Notwendigkeit, auf den Prozess zu warten

ist irgendein Rubygems zur Unterstützung für mein Problem?

Antwort

7

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.

1

exec schaltet die Steuerung auf einen neuen Prozess um und kehrt nie zurück. system erstellt einen Subprozess und wartet darauf, dass er beendet wird.

Was Sie wahrscheinlich tun möchten, ist fork und dann exec, um einen neuen Prozess zu erstellen, ohne auf die Rückkehr warten zu müssen. Sie können auch die win32ole Bibliothek verwenden, die möglicherweise give you more control ist.

Verwandte Themen