rrevi
rrevi

Reputation: 1051

Windows commands in ruby

How do I run a Windows command in an Ruby app?

I am trying to run something like:

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

I print the result of the line above and paste it to a command prompt in Windows and it works just fine. However, when i run app and hit this code, output is blank rather than have a string I get back from HellowWorld. In HelloWorld I do a System.out.print("helloworld")

The following:

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

Returns:

OUTPUT

Upvotes: 1

Views: 567

Answers (3)

Phrogz
Phrogz

Reputation: 303224

Backticks work fine for me. Try:

output = `dir`

to prove to yourself that it's working. At that point, your question is how to run a Java app from the command line, or why your particular app isn't work. Note that you can temporarily change the working directory like this:

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

Upvotes: 1

rrevi
rrevi

Reputation: 1051

Issue in JRuby 1.5.3 fixed in JRuby 1.5.5: http://www.jruby.org/2010/11/10/jruby-1-5-5.html

Upvotes: 2

fl00r
fl00r

Reputation: 83680

Try to use File#join here. It will generate crossplatform path for you

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

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

Also you can execute your system commands this way:

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

Related topic: System call from Ruby

Upvotes: 1

Related Questions