Команды Windows в ruby - PullRequest
       5

Команды Windows в ruby

1 голос
/ 20 апреля 2011

Как запустить команду Windows в приложении Ruby?

Я пытаюсь запустить что-то вроде:

output = `cd #{RAILS_ROOT}/lib && java HelloWorld #{param1} #{param2}`

Я печатаю результат строки выше и вставляю его в командную строку в Windows, и он работает просто отлично. Однако, когда я запускаю приложение и нажимаю этот код, вывод будет пустым, а не будет строки, которую я получаю из HellowWorld. В HelloWorld я делаю System.out.print ("helloworld")

Следующее:

output = `cmd.exe /C dir`
puts "OUTPUT #{output}"

Возвращает:

ВЫХОД

Ответы [ 3 ]

2 голосов
/ 20 апреля 2011

Исправлена ​​ошибка в JRuby 1.5.3 в JRuby 1.5.5: http://www.jruby.org/2010/11/10/jruby-1-5-5.html

1 голос
/ 20 апреля 2011

Попробуйте использовать File#join здесь. Он сгенерирует кроссплатформенный путь для вас

http://apidock.com/ruby/File/join/class

my_path = File.join(RAILS_ROOT, "lib")
output = `cd #{my_path} && java HelloWorld #{param1} #{param2}`

Также вы можете выполнять системные команды следующим образом:

`cd #{my_path} && java HelloWorld #{param1} #{param2}`
system("cd #{my_path} && java HelloWorld #{param1} #{param2}")
%x[cd #{my_path} && java HelloWorld #{param1} #{param2}]

Тема по теме: Системный вызов из Ruby

1 голос
/ 20 апреля 2011

Backticks у меня хорошо работает. Попробуйте:

output = `dir`

чтобы доказать себе, что это работает. В этот момент ваш вопрос заключается в том, как запустить приложение Java из командной строки или почему ваше конкретное приложение не работает. Обратите внимание, что вы можете временно изменить рабочий каталог следующим образом:

Dir.chdir(File.join(RAILS_ROOT,'lib')) do
  output = `...`
end
...