2010-07-14 5 views
6

Lorsque j'utilise IO::popen avec une commande inexistante, je reçois un message d'erreur affiché à l'écran:« command not found » Secourir pour IO :: popen

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

Est-il possible que je peux saisir cette erreur, donc je peux examiner à partir de mon script?

Répondre

2

Oui: mise à niveau vers ruby ​​1.9. Si vous exécutez cela dans 1.9, un Errno::ENOENT sera augmenté à la place, et vous pourrez le rescue.

(Edit) est ici un moyen hackish de le faire 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 
Questions connexes