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

7
我有一个文件位于目录"C:\Documents and Settings\test.exe",但是当我在Ruby中写入命令`C:\Documents and Settings\test.exe`(用于执行命令),并使用单引号(此处无法显示)时,我无法执行该命令,出现的错误是找不到文件或目录。我尝试了用"//"和"\"替换"\",但都没有起作用。我还使用了system、IO.popen和exec命令,但所有努力都是徒劳的。另外,exec命令会使程序退出,这不是我想要的结果。
提前感谢您的帮助。

我假设你指的是“反引号”而不是“单引号”,但除非你确认,否则我不会编辑你的问题。 - davetron5000
2个回答

8

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

未定义方法`capture3'于Open3:Module (NoMethodError),使用ruby 1.8.7。 - stack1

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

或者

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

“或者其他什么”

主要思路是将路径用引号括起来。我不熟悉Windows,因此可能会有其他限制。 - fl00r
我不知道我正在使用的文件是否有一些限制,无法在Ruby程序中工作,或者我指定文件路径的方式是否不正确,但是对我来说这个东西不起作用...但是你告诉我的方法是正确的! - Apoorv Saxena

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接