Спасение "команда не найдена" для IO :: popen - PullRequest
6 голосов
/ 15 июля 2010

Когда я использую IO::popen с несуществующей командой, на экран выводится сообщение об ошибке:

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

Есть ли какой-нибудь способ, которым я могу зафиксировать эту ошибку, чтобы я мог изучить ее в своем сценарии?

1 Ответ

2 голосов
/ 15 июля 2010

Да: обновить до ruby ​​1.9.Если вы запустите это в 1.9, вместо этого будет поднят Errno::ENOENT, и вы сможете rescue.

(Правка) Вот хакерский способ сделать этов 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
...