Когда я использую IO::popen
с несуществующей командой я распечатал сообщение об ошибке на экран:
irb> IO.popen "fakefake"
#=> #<IO:0x187dec>
irb> (irb):1: command not found: fakefake
Есть ли какой-либо способ, которым я могу зафиксировать эту ошибку, таким образом, я могу исследовать из своего сценария?
Да: Перейдите на версию ruby 1.9. Если вы запустите это в 1.9, вместо этого будет вызвано Errno::ENOENT
, и вы сможете спасти
его.
(Edit) Вот хакерский способ сделать это в 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