Когда я делаю что-то вроде следующего:
output = `identify some_file` output == "Output of identify"
Но когда ...
output = `identify non_existant_file` output != "Error output of identify"
Как получить ошибку вывода системных вызовов?
Я узнал ответ. Вывод отправляется в stderr. Поэтому я могу просто добавить следующее в конце команды, чтобы перенаправить stderr в stdout:
output = `identify any_file 2>&1` output == "Error or output of identify"
Вот объяснение этого колдовства
Вы можете использовать Open3.popen3.
Open3.popen3
http://www.ruby -doc.org / STDLIB-1.9.3 / libdoc / open3 / RDoc / Open3.html # способ-с-popen3
popen3 (* cmd, & block) нажмите для переключения источника Открытие потоков stdin, stdout и stderr и запуск внешнего исполняемого файла.
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. }