靴アプリから別のルビースクリプトを実行したい。やってみます
button "..." do
`ruby -rubygems /Users/kemiisto/Desktop/Ruby/gears.rb`
end
しかし、何も起こりません。他のコマンドの場合、例えば
button "..." do
`open /Applications/TextEdit.app/`
end
すべて正常に動作します。何か案は?
コマンドが返すテキストに対して何もしていないだけです。「system」またはバッククォートを介してシステムコマンドを実行すると、各コマンドは、コマンドがSTDOUTにダンプしたものを返します。
Shoes.app do
@s = stack {}
button "go!" do
@out = `ls -al`
@s.clear { para @out }
end
end
これはおそらく奇妙な方法です。しかし、私はうまくいくと思います。
たぶんあなたはMacを使っていますか?(あなたのパスから)、このコードはウィンドウズで動作します。
Macの場合は、ターミナルを実行した後、ターミナルにコマンドを送信できると思います。
またはrubyからapplescriptを実行します。
以下のアイデアがあなたの助けになることを願っています(勝利のために)。
require 'win32ole'
...some code...
button "..." do
@auto = WIN32OLE.new('AutoItX3.Control')
@auto.Run('cmd.exe','',@SW_MAXIMIZE)
@auto.WinActivate("C:\WINDOWS\system32\cmd.exe")
@auto.ControlSend("[CLASS:ConsoleWindowClass]", "", "", 'ruby -rubygems /Users/kemiisto/Desktop/Ruby/gears.rb')
end
load
よりもうまく機能する可能性があります
require
あなたのためにここに。Require は何かを 1 回だけロードします。
私は実行してみます
Shoes.app do
@s = stack {}
button "debug" { @s.clear { para `which ruby` } }
end
そのため、それが呼び出しているルビーの呼び出しを確認し、そこから作業することができます
さらに良いことに、 が機能している場合open
は、 の呼び出しをruby
に変更してみてください/usr/bin/env ruby
。
簡単なrequire はどうですか?それは間違いなく機能しますが、後で実際に何が起こっているのかを追跡することは何も考えられません( trueは別として、すべてが問題ない場合にrequireによって返されます) ...このシナリオでは、システムはそれほど有益ではありませんが.