Получить ошибку вывода системного вызова? - PullRequest
1 голос
/ 28 января 2012

Когда я делаю что-то вроде следующего:

output = `identify some_file`
output == "Output of identify"

Но когда ...

output = `identify non_existant_file`
output != "Error output of identify"

Как получить ошибку вывода системных вызовов?

Ответы [ 2 ]

5 голосов
/ 31 января 2012

Я узнал ответ. Вывод отправляется в stderr. Поэтому я могу просто добавить следующее в конце команды, чтобы перенаправить stderr в stdout:

output = `identify any_file 2>&1`
output == "Error or output of identify"

Вот объяснение этого колдовства

2 голосов
/ 28 января 2012

Вы можете использовать Open3.popen3.

http://www.ruby -doc.org / STDLIB-1.9.3 / libdoc / open3 / RDoc / Open3.html # способ-с-popen3

popen3 (* cmd, & block) нажмите для переключения источника

Открытие потоков stdin, stdout и stderr и запуск внешнего исполняемого файла.

Open3.popen3([env,] cmd... [, opts]) {|stdin, stdout, stderr, wait_thr|
  pid = wait_thr.pid # pid of the started process.
  ...
  exit_status = wait_thr.value # Process::Status object returned.
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...