Потоки ввода-вывода по-простому


Потоки ввода-вывода по-простому

В Unix-подобных системах ввод-вывод реализован через потоки: stdin, stdout, stderr.

Пример работы с этими потоками из Python

import sys
 
 
print("Enter name: ", end="", file=sys.stderr) # stderr
 
name = input() # stdin
 
print("Hello, " + name) # stdout

Простые перенаправления

Перенаправления (redirections) в shell позволяют изменять места ввода и вывода данных.

Описание
>fВывод в файл f, перезаписывая его.
2>fВывод ошибок в файл f, перезаписывая его.
<fЧтение данных из файла f.
>>fДобавление вывода в конец файла f.
|Передача вывода одной команды в другую.

Простые перенаправления

Например, можно исполнить пример на Python, написанный выше. Предположим, что этот код сохранён в файле io.py.

Сделаем файл с данными для ввода inp с таким содержимым:

OMP

тогда можно сделать, например, такие перенаправления:

python io.py >out <inp 2>err

Результатом такой команды будет:

  • файл out с содержимым Hello, OMP
  • файл err с содержимым Enter name:
  • файл inp не меняется, но использован в качестве ввода;


Простые перенаправления

Пайп | — фундаментальный в Unix, на нем строится очень много, в т.ч. сложных, вещей.

Например, можно вывести все шеллы, которые используют первые 10 пользователей в системе. Выведем при этом только уникальные шеллы, без повторений и в лексикографическом порядке:

head -n 10 /etc/passwd | cut -d: -f7 | sort -u