Ответ
В Linux и других UNIX-подобных системах каждая программа при запуске получает три стандартных потока ввода-вывода. Это основной механизм для текстового взаимодействия между программами и терминалом.
stdin
(standard input) — стандартный поток ввода. По умолчанию связан с клавиатурой. Имеет файловый дескриптор 0.stdout
(standard output) — стандартный поток вывода. Сюда направляется обычный вывод программы. По умолчанию связан с терминалом. Дескриптор 1.stderr
(standard error) — стандартный поток ошибок. Сюда направляются сообщения об ошибках и диагностическая информация. По умолчанию также связан с терминалом. Дескриптор 2.
Разделение stdout
и stderr
позволяет перенаправлять обычный вывод программы в файл, но при этом видеть ошибки в консоли.
Перенаправление потоков в Shell
Операторы командной строки позволяют управлять этими потоками:
# Записать вывод команды ls в файл output.txt (перенаправление stdout)
ls -l > output.txt
# Записать ошибки в error.log (перенаправление stderr)
find /root -name "*.py" 2> error.log
# Прочитать данные для команды sort из файла input.txt (перенаправление stdin)
sort < input.txt
# Передать stdout команды 'cat' на stdin команды 'grep' (конвейер)
cat /var/log/syslog | grep 'error'
Пример использования в Python
import sys
# Чтение всех данных из стандартного ввода
for line in sys.stdin:
# Запись в стандартный вывод
sys.stdout.write(f"Processed line: {line}")
# Запись ошибки в стандартный поток ошибок
sys.stderr.write("An error occurred!n")