【问题标题】:How to execute Windows CLI commands in Ruby?如何在 Ruby 中执行 Windows CLI 命令?
【发布时间】:2011-04-03 18:16:30
【问题描述】:

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

提前致谢。

【问题讨论】:

  • 我假设您使用的是“反引号”而不是“单引号”,但除非您确认,否则我不会编辑您的问题。

标签: ruby command-line windows-console backticks


【解决方案1】:

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

【讨论】:

  • 使用 ruby​​ 1.8.7 的 Open3:Module (NoMethodError) 的未定义方法 `capture3'
【解决方案2】:
`"C:\Documents and Settings\test.exe"`

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

或任何在 qoutes 中的东西

【讨论】:

  • 主要思想是将路径包装成引号。我不熟悉 Windows,所以可能有任何其他限制。
  • 不知道我正在使用的文件是否对在 Ruby 程序中工作有一些限制,或者我指定文件路径的方式不正确,但它不适合我。 ..但是你说的方法是对的!!!
猜你喜欢
  • 1970-01-01
  • 2021-10-08
  • 2019-06-22
  • 1970-01-01
  • 2013-04-30
  • 1970-01-01
  • 1970-01-01
  • 2020-04-20
  • 1970-01-01
相关资源
最近更新 更多