7

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

提前致谢。

4

2 回答 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
于 2011-08-25T12:29:39.203 回答
6
`"C:\Documents and Settings\test.exe"`

或者

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

或任何在 qoutes

于 2011-04-03T18:24:36.257 回答