家・車以外で、人生で一番奮発した買い物

Rubyスクリプトから他のコマンド, プログラムを起動するのに、system()やexec()を使用していますが、これらの組み込み関数だと、起動したプログラムが終了するまでRubyスクリプトに戻ってきません。

外部プログラムを起動した後、すぐにRubyスクリプトに戻るようにするにはどうすればよいでしょうか?

よろしくお願いします。

A 回答 (3件)

Rubyだけでできるような気がしますが、経験値が低いので


Windows環境限定ということではプログラムの起動では、WSHを使うのが反って簡単かもしれません。
------------------------------------------
require "win32ole"
shell = WIN32OLE.new("WScript.Shell")
shell.Run("notepad")
------------------------------------------
の様にして任意のプログラムを実行できます。
    • good
    • 0

別Threadでsystemを呼ぶとか。



cmd = 'notepad';
Thread.new( cmd ){ system cmd; }
print "fin.";

Windows限定で、cmd.exe経由で実行するという手も。

cmd = 'notepad';
system %Q|cmd /C "start #{cmd}"|;
print "fin.";

でも、Windows限定なら、既回答であるところの、Win32OLEでWshShell#runを呼ぶのが一番効率的かも。
    • good
    • 0

forkして、子プロセスでsystem()を呼んでみては。



参考URL:http://www.ruby-lang.org/ja/man/?cmd=view;name=% …

この回答への補足

ありがとうございます。
ただ、mswin32版を使用しているので、fork()は使用できないんです。mswin32版でも使用出来る方法をご存知でしたら、教えてください。

よろしくお願いします。

補足日時:2005/11/05 11:38
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報