Ruby:
Запись в стандартный поток ошибок
Как это сделать:
В Ruby вы можете писать в стандартный поток ошибок, используя $stderr.puts
или его сокращённую форму STDERR.puts
. Вот простой пример:
puts "Это пойдёт в стандартный вывод."
$stderr.puts "Это пойдёт в стандартный поток ошибок."
# Сокращённая версия:
STDERR.puts "Это тоже пойдёт в стандартный поток ошибок."
Откройте терминал, запустите скрипт и заметьте, что по умолчанию всё всё равно отображается вместе. Чтобы разделить потоки, требуется перенаправление. Вот как это можно сделать:
ruby your_script.rb >output.txt 2>error.txt
Эта команда перенаправляет стандартный вывод в output.txt
и стандартный поток ошибок в error.txt
.
Подробнее
Концепция stderr
возвращает нас к самым ранним дням Unix. Она предназначена для сообщений об ошибках, чтобы они оставались видимыми, даже когда stdout
перенаправлен. Хотя $stderr.puts
и STDERR.puts
являются распространёнными в Ruby, существуют и другие способы записи в stderr
, такие как использование warn
для вывода предупреждений или более низкоуровневых API вроде $stderr.write
. С точки зрения реализации, stderr
по умолчанию не буферизуется, что обеспечивает немедленный вывод, в то время как stdout
обычно буферизуется.
Смотрите также
- Документация Ruby по I/O: https://ruby-doc.org/core-3.1.2/IO.html
- Базовые спецификации Open Group (стандартные потоки UNIX): https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap08.html
- Понимание перенаправления в Shell скриптах: https://www.gnu.org/software/bash/manual/html_node/Redirections.html