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

Apo*_*ena 5 ruby command-line backticks windows-console

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

提前致谢.

dav*_*000 7

反引号环境就像双引号,因此反斜杠用于转义.此外,Ruby会将空格解释为分隔命令行参数,因此您需要引用整个事物:

`"C:\\Documents and Settings\\test.exe"`
Run Code Online (Sandbox Code Playgroud)

另一个选择是使用system并强制第二个参数.如果system获得多个参数,它会将第一个参数视为要执行的命令的路径,并且您不需要引用该命令:

system('C:\Documents and Settings\test.exe','')
Run Code Online (Sandbox Code Playgroud)

注意使用引号,所以我们没有转义反斜杠.

当然,这不会让你出现标准输出/错误,所以如果你使用的是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
Run Code Online (Sandbox Code Playgroud)


fl0*_*00r 6

`"C:\Documents and Settings\test.exe"`
Run Code Online (Sandbox Code Playgroud)

或者

`exec "C:\Documents and Settings\test.exe"`
Run Code Online (Sandbox Code Playgroud)

或任何在 qoutes