如何在Ruby中执行Windows CLI命令?

时间:2011-04-03 18:16:30

标签: ruby command-line windows-console backticks

我有一个位于“C:\ Documents and Settings \ test.exe”目录中的文件,但是当我在单个qoutes(我无法在此框中显示)中编写命令`C:\Documents and Settings\test.exe时,用于在Ruby中执行命令,我无法这样做,我收到的错误是找不到文件或目录。我尝试用“//”和“\”替换“\”,但似乎没有任何效果。我还使用了system,IO.popen和exec命令,但所有的努力都是徒劳的。此外,exec命令使程序退出,我不想发生。

提前致谢。

2 个答案:

答案 0 :(得分:7)

反引号环境类似于双引号,因此反斜杠用于转义。此外,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

答案 1 :(得分:4)

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

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

或qoutes中的任何内容