Пытаясь проверить, существует ли команда с 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"