抢救IO :: popen的“命令未找到”

时间:2010-07-14 22:14:17

标签: ruby popen

当我将IO::popen与不存在的命令一起使用时,我会在屏幕上显示错误消息:

 irb> IO.popen "fakefake"
  #=> #<IO:0x187dec>
 irb> (irb):1: command not found: fakefake

有没有办法可以捕获这个错误,所以我可以在我的脚本中查看?

1 个答案:

答案 0 :(得分:2)

是:升级到ruby 1.9。如果你在1.9中运行,则会引发Errno::ENOENT,而你可以rescue

(编辑)这是一种在1.8中执行此操作的hackish方式:

error = IO.pipe
$stderr.reopen error[1]
pipe = IO.popen 'qwe' # <- not a real command
$stderr.reopen IO.new(2)
error[1].close

if !select([error[0]], nil, nil, 0.1)
  # The command was found. Use `pipe' here.
  puts 'found'
else
  # The command could not be found.
  puts 'not found'
end