Системный вызов Ruby получает информацию о сбое команды - PullRequest
3 голосов
/ 04 августа 2011

Скажем, у меня есть простой интерпретатор командной строки, такой как:

while true
  print '> '
  cmd = gets.chomp
  break if cmd =~ /^(exit|quit)/
  system(cmd) || puts('Command not found or invalid.')
end

Я бы хотел вместо «Команда не найдена или недействительна».message получает реальное сообщение об ошибке, подобное тому, которое вы получите от bash.Как бы я это сделал?

1 Ответ

6 голосов
/ 04 августа 2011

хорошо, если это unix-подобная система, вы можете добавить 2> & 1 к вашей команде:

system(cmd + ' 2>&1 ')

, которая перенаправит ваш stderr на стандартный вывод

, другой способ - использовать% x[...]:

irb(main):027:0> def hello
irb(main):029:2*   %x[hello]
irb(main):030:2> rescue Exception => e
irb(main):031:2>   puts e.message
irb(main):033:1> end
=> nil
irb(main):034:0> hello
No such file or directory - hello
=> nil
irb(main):035:0>

означает, что вы можете спасти выполнение команды и вернуть сообщение об исключении

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