5

ページを開いているときにexeが実行されるはずです。非同期プロセスを実行する必要があります。

ルビーで2つの引数を使用してexeを非同期で実行する方法はありますか?

私はrubyコマンド(system()、exec())を試しましたが、プロセスが完了するのを待っています。私はパラメータでexeを開始する必要がありますプロセスが完了するのを待つ必要はありません

私の問題をサポートするRubygemsはありますか?

4

2 に答える 2

7

あなたが使用することができProcess.spawnますProcess.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オブジェクトにアクセスできることです。プロセスの標準の入力、出力、およびエラーストリームは、この順序でそれらにリダイレクトされます。

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

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

于 2012-04-10T17:36:22.467 に答える
1

exec制御を新しいプロセスに切り替え、戻ることはありません。systemサブプロセスを作成し、それが終了するのを待ちます。

おそらくやりたいことはforkexecそれが戻るのを待たずに新しいプロセスを作成することです。win32oleライブラリを使用して、より詳細に制御することもできます。

于 2012-04-10T16:17:24.343 に答える