Среда обратного удара похожа на двойные кавычки, поэтому для экранирования используется обратный слеш. Кроме того, Ruby будет интерпретировать пробелы как разделяющие аргументы командной строки, поэтому вам нужно заключить в кавычки все:
`"C:\\Documents and Settings\\test.exe"`
Другой вариант - использовать system
и использовать второй аргумент. Если system
получает более одного аргумента, он обрабатывает первый аргумент как путь к команде, которую нужно выполнить, и вам не нужно заключать команду в кавычки:
system('C:\Documents and Settings\test.exe','')
Обратите внимание на использование одинарных кавычек, поэтому мы не можем избежать обратной косой черты.
Конечно, это не даст вам стандартного выхода / ошибки, поэтому если вы используете Ruby 1.9.2, вы можете использовать очень удобную библиотеку Open3
, которая работает как system
, но дает вам больше информация о процессе, который вы только что запустили:
require 'open3'
stdout,stderr,status = Open3.capture3('C:\Documents and Settings\test.exe','')
puts stdout # => string containing standard output of your command
puts stderr # => string containing standard ERROR of your command
if status.success?
puts "It worked!"
else
puts "OH NOES! Got exit code #{status.exitstatus}"
end