Спасение “команды, не найденной” для IO:: popen

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

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

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

6
задан rampion 14 July 2010 в 22:14
поделиться

1 ответ

Да: Перейдите на версию 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
2
ответ дан 17 December 2019 в 20:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: