Как выполнить скрипт ruby ​​на каком-то событии? - PullRequest
2 голосов
/ 13 января 2009

Я хочу выполнить еще один скрипт ruby ​​из моего приложения Shoes. Я стараюсь

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

но ничего не происходит. В случае других команд, например

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

все отлично работает. Есть идеи?

Ответы [ 5 ]

2 голосов
/ 13 января 2009

Вещи происходят, вы просто ничего не делаете с текстом, который возвращают ваши команды. Когда вы запускаете системную команду через 'system' или backticks, каждая команда возвращает любую команду, сброшенную в STDOUT.

Shoes.app do
  @s = stack {}

  button "go!" do
    @out = `ls -al`
    @s.clear { para @out }
  end
end
1 голос
/ 25 октября 2009

Это может быть странный способ. Но я думаю, что работает.
Может быть, вы используете Mac? (Из вашего пути), этот код работает в Windows.
Если на Mac, я думаю, вы можете отправить команду на терминал после выполнения терминала.
или выполнить яблочный скрипт из рубина.

Надеюсь, что эта идея поможет вам (для победы).

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
0 голосов
/ 31 января 2009
load

может работать лучше, чем

require

для вас здесь. Require загрузит что-то только один раз.

0 голосов
/ 26 января 2009

Как насчет простого , требующего ? Это определенно работает, но я ничего не могу проследить, что на самом деле происходит после (кроме true , возвращаемого , требуется , если все в порядке) ... Хотя system не будет намного более информативным в этом сценарии.

0 голосов
/ 14 января 2009

Я бы попробовал запустить

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

чтобы вы могли видеть, какой вызов ruby ​​он вызывает, и работать оттуда

Еще лучше, если open работает, попробуйте изменить ваш вызов ruby на /usr/bin/env ruby.

...