Как выполнять команды командной строки Windows в Ruby? - PullRequest
5 голосов
/ 03 апреля 2011

У меня есть файл, расположенный в каталоге «C: \ Documents and Settings \ test.exe», но когда я пишу команду `C:\Documents and Settings\test.exe в однократном порядке (которую я не могу отобразить в этом окне), используется для при выполнении команд в Ruby я не могу этого сделать, и я получаю сообщение об ошибке: «Файл или каталог не найдены». Я пытался заменить "\" на "//" и "\", но ничего не работает. Я также использовал команды system, IO.popen и exec, но все усилия напрасны. Кроме того, команды exec заставляют программу завершить работу, чего я не хочу.

Заранее спасибо.

Ответы [ 2 ]

7 голосов
/ 25 августа 2011

Среда обратного удара похожа на двойные кавычки, поэтому для экранирования используется обратный слеш. Кроме того, 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
4 голосов
/ 03 апреля 2011
`"C:\Documents and Settings\test.exe"`

или

`exec "C:\Documents and Settings\test.exe"`

или что-то в квотах

...