如何在某些事件上执行ruby脚本?

时间:2009-01-13 14:17:21

标签: ruby events shoes

我想从我的Shoes应用程序执行另一个ruby脚本。我试试

button "..." do
  `ruby -rubygems /Users/kemiisto/Desktop/Ruby/gears.rb`  
end

但没有任何反应。在其他命令的情况下,例如

button "..." do
  `open /Applications/TextEdit.app/`  
end

一切正常。有什么想法吗?

5 个答案:

答案 0 :(得分:2)

事情正在发生,你只是没有对你的命令返回的文本做任何事情。当您通过'system'或反引号运行系统命令时,每个命令都会返回转储到STDOUT的命令。

Shoes.app do
  @s = stack {}

  button "go!" do
    @out = `ls -al`
    @s.clear { para @out }
  end
end

答案 1 :(得分:1)

这可能是奇怪的方式。但我觉得有效 也许你使用Mac?(从您的路径),此代码适用于Windows 如果在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

答案 2 :(得分:0)

我试着跑

    Shoes.app do
        @s = stack {}
        button "debug" { @s.clear { para `which ruby` } }
    end

所以你可以看到它正在调用哪个ruby调用,并从那里开始工作

更好的是,如果open有效,请尝试将ruby的调用更改为/usr/bin/env ruby

答案 3 :(得分:0)

简单的需要怎么样? 它肯定有效,但我无法想象追溯之后发生了什么(除了真正的,由需要返回,如果一切正常的话)......虽然在这种情况下,系统的信息量不会太多。

答案 4 :(得分:0)

load

可能比

更好
require

在这里。要求只会加载一次。