Пытаясь проверить, существует ли команда с ruby ​​popen3

Я пытаюсь проверить, существует ли системная команда со следующим кодом:

require 'open3'

Open3.popen3('non-existing command') do |stdin, stdout, stderr, thread|
  exit_error = stderr.readlines
  if exit_error["No such file or directory"]
    puts "command not found"
  end
end

Однако он просто вылетает со следующим сообщением об ошибке и не продолжается:

/home/pavel/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/open3.rb:211:in `spawn': No such file or directory - non-existing (Errno::ENOENT)

Почему и как это исправить?

1 ответ

Решение

Кажется, что Open3.popen3 поднимает Errno::ENOENT исключение, если оно не находит команду; так что вам просто нужно спасти от этого исключения:

require 'open3'

begin
  Open3.popen3('non-existing command') do |stdin, stdout, stderr, thread|
  end
rescue Errno::ENOENT
  puts "command not found"
end

#=> outputs "command not found"
Другие вопросы по тегам