当我将IO::popen
与不存在的命令一起使用时,我会在屏幕上显示错误消息:
irb> IO.popen "fakefake"
#=> #<IO:0x187dec>
irb> (irb):1: command not found: fakefake
有没有办法可以捕获这个错误,所以我可以在我的脚本中查看?
答案 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