Потоковый ввод sys.stdin

Потоковый ввод sys.stdin

Python Map | Обучение

Введение

В большинстве случаев для ввода данных используется функция input(). Это удобно, когда мы знаем, сколько строк с данными ввести, либо какая строка будет сигналом для остановки. Но что делать, когда количество входных строк не известно, а строка для остановки не предусмотрена? В таком случае нужно использовать так называемый стандартный поток ввода.

Потоковый ввод

В Python есть очень полезный встроенный итерируемый файловый объект: sys.stdin. Это — итератор так называемого стандартного потока ввода.

Поток ввода (stdin) — специальный файловый объект в программе, куда попадает весь текст, который ввел пользователь. Потоком его называют потому, что данные хранятся там до тех пор, пока программа их не считала. Данные поступают в программу и временно «складируются» в потоке ввода, а программа может «забрать» их оттуда, например, при помощи функции input(). В момент прочтения они удаляются из потока ввода: он хранит данные «до востребования».

Использование

Чтобы работать с sys.stdin, прежде всего необходимо подключить модуль sys командой import sys.

Напишем небольшую программу, которая записывает все введенные строки в список и выводит его после завершения ввода.

С помощью цикла

import sys
data = []
for line in sys.stdin:
  # rstrip('\n') "отрезает" от строки line идущий справа символ
  data.append(line.rstrip("\n"))
print(data)

С помощью генератора списков

import sys
data = [l.rstrip("\n") for l in sys.stdin]
print(data)

Но если вы запустите эту программу, она будет работать вечно. Чтобы показать, что ввод закончен, пользователю недостаточно нажать Enter — компьютер не знает, завершил пользователь работу или будет еще что-то вводить (при этом Enter превратится в пустую строку). Вместо этого вы должны нажать Ctrl + D (если работаете в консоли Linux, IDE PyCharm или IDLE Python) либо Ctrl + Z, затем Enter (если работаете в консоли Windows).


Report Page