2010-07-14 5 views
6

popen Wenn ich IO::popen mit einem nicht existierenden Befehl verwenden, erhalte ich eine Fehlermeldung auf dem Bildschirm ausgegeben:Rescuing „Befehl nicht gefunden“ für IO ::

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

Gibt es eine Möglichkeit, diese erfassen kann Fehler, so dass ich in meinem Skript untersuchen kann?

Antwort

2

Ja: Upgrade auf Ruby 1.9. Wenn Sie das in 1.9 ausführen, wird stattdessen eine Errno::ENOENT ausgelöst, und Sie können rescue es werden.

(Edit) Hier ist ein hackish wie es in 1,8 tun:

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