2010-07-14 8 views
6

Cuando uso IO::popen con un comando inexistente, me sale un mensaje de error impreso a la pantalla:El rescate de "comando no encontrado" para IO :: popen

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

¿Hay alguna manera de poder captar este error, entonces puedo examinar desde dentro de mi script?

Respuesta

2

Sí: Actualice a ruby ​​1.9. Si ejecuta eso en 1.9, se generará un Errno::ENOENT, y podrá rescue.

(Editar) Aquí está una manera hacker de hacerlo en 1,8:

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