2012-04-10 11 views
5

exeは、私がページを開いているときに実行する必要があります。非同期プロセスを実行する必要があります。exeを実行するにはrubyの2つの引数を非同期に実行しますか?

exeを実行する方法はありますか?ルビの2つの引数を非同期に実行する方法はありますか?

私はrubyコマンド - system()、exec()を試していますが、プロセスが完了するのを待っています。私は、プロセスを完了するのを待つ必要がないパラメータでEXEを起動する必要があります

私の問題をサポートするつもりのルーベンスですか?

答えて

7

あなたはProcess.spawnProcess.wait2を使用することができます。

pid = Process.spawn 'your.exe', '--option' 

# Later... 
pid, status = Process.wait2 pid 

あなたのプログラムはインタプリタの子プロセスとして実行されます。それ以外にも、コマンドラインから起動されたかのように動作します。

またOpen3.popen3を使用することができます。

require 'open3' 
*streams, thread = Open3.popen3 'your.exe', '--option' 

# Later... 
streams.each &:close 
status = thread.value 

ここでの主な違いは、あなたが3つのIOオブジェクトへのアクセスを得ることです。プロセスの標準入力、出力、およびエラー・ストリームは、その順にリダイレクトされます。

これは、プログラムの出力を消費する場合、または標準入力ストリームを使用して通信する場合に最適です。通常、端末に印刷されるテキストは、代わりにスクリプトで使用できるようになります。

また、プログラムの実行が完了するのを待つスレッドもあります。これは便利で直感的です。

1

execスイッチは新しいプロセスを制御し、決して戻ってこない。 systemサブプロセスを作成し、終了するのを待ちます。

forkを入力し、次にexecを入力して、新しいプロセスを作成して、返されるのを待つことなく実行します。 give you more controlwin32oleライブラリを使用することもできます。

関連する問題