Windows kommandoer i rubin

Indlæg af Hanne Mølgaard Plasc

Problem



Hvordan kører jeg en Windows-kommando i en Ruby-app?


Jeg forsøger at køre noget som:


output = `cd #{RAILS\_ROOT}/lib && java HelloWorld #{param1} #{param2}`


Jeg udskriver resultatet af linjen ovenfor og indsætter det til en kommandoprompt i Windows, og det virker fint. Men når jeg kører app og ramte denne kode, er output blank i stedet for at have en streng, jeg kommer tilbage fra HellowWorld. I HelloWorld laver jeg et System.out.print ('helloworld')


Det følgende:


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


Vender tilbage:



  PRODUKTION


Bedste reference


Udgave i JRuby 1.5.3 fastgjort i JRuby 1.5.5:
http://www.jruby.org/2010/11/10/jruby-1-5-5.html[8]

Andre referencer 1


Prøv at bruge File#join her. Det vil generere cross platform path for dig



  http://apidock.com/ruby/File/join/class[9]



my\_path = File.join(RAILS\_ROOT, "lib")
output = `cd #{my\_path} && java HelloWorld #{param1} #{param2}`


Du kan også udføre dine systemkommandoer på denne måde:


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


Relateret emne: Systemopkald fra Ruby

Andre referencer 2


Backticks fungerer fint for mig. Prøve:


output = `dir`


at bevise for dig selv, at det virker. På det tidspunkt er dit spørgsmål, hvordan du kører en Java-app fra kommandolinjen, eller hvorfor din app ikke virker. Bemærk, at du midlertidigt kan ændre arbejdsmappen som denne:


Dir.chdir(File.join(RAILS\_ROOT,'lib')) do
  output = `...`
end