Просто итерируйте по sys.stdin
, он будет повторяться по строкам.
Затем вы можете сложить выражения генератора или использовать map
и filter
, если хотите.Каждая входящая строка будет проходить через конвейер, никакой список не будет встроен в процесс.
Вот примеры каждого из них:
import sys
stripped_lines = (line.strip() for line in sys.stdin)
lines_with_prompt = ('--> ' + line for line in stripped_lines)
uppercase_lines = map(lambda line: line.upper(), lines_with_prompt)
lines_without_dots = filter(lambda line: '.' not in line, uppercase_lines)
for line in lines_without_dots:
print(line)
И в действии, в терминале:
thierry@amd:~$ ./test.py
My first line
--> MY FIRST LINE
goes through the pipeline
--> GOES THROUGH THE PIPELINE
but not this one, filtered because of the dot.
This last one will go through
--> THIS LAST ONE WILL GO THROUGH
Более короткий пример только с map
, где map
будет повторяться по строкам stdin
:
import sys
uppercase_lines = map(lambda line: line.upper(), sys.stdin)
for line in uppercase_lines:
print(line)
В действии:
thierry@amd:~$ ./test2.py
this line will turn
THIS LINE WILL TURN
to uppercase
TO UPPERCASE