Захватывать ошибки "команда не найдена" из-за взломов Руби? - PullRequest
7 голосов
/ 24 января 2011

Есть ли способ зафиксировать ошибку "команда не найдена" в скрипте Ruby? Например, учитывая:

output = `foo`

Как мне перехватить ситуацию, когда foo не установлен? Я ожидал, что смогу rescue сделать исключение, но это не работает на 1.8.7. Есть ли другой способ вызова подпроцесса, который будет делать то, что я хочу? Или есть другой подход?

Обновление

Мои извинения, я забыл упомянуть о скрытом требовании: я бы предпочел, чтобы интерпретатор не передавал пользователю командную строку (она может содержать конфиденциальные данные), поэтому предпочтительным является метод перехвата исключений. Снова извиняюсь за то, что пропустил это в первый раз.

1 Ответ

14 голосов
/ 24 января 2011

Используйте код возврата!

irb(main):001:0> `date`
=> "Mo 24. Jan 16:07:15 CET 2011\n"
irb(main):002:0> $?
=> #<Process::Status: pid=11556,exited(0)>
irb(main):003:0> $?.to_i
=> 0
irb(main):004:0> `foo`
(irb):4: command not found: foo
=> ""
irb(main):005:0> $?.to_i
=> 32512

http://corelib.rubyonrails.org/classes/Process/Status.html

Перенаправление STDERR на STDOUT даст вам вывод в качестве возвращаемого значения вместо того, чтобы просто раздуть его:*

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...