Итак, вы использовали «предварительно встроенные функции» Python, предположительно, вот так:
file_object = open('filename')
for something in file_object:
some stuff here
Это читает файл, вызывая итератор для файлового объекта, который возвращает следующую строку из файла.
Вместо этого вы можете использовать:
file_object = open('filename')
lines = file_object.readlines()
который считывает строки из текущей позиции файла в список.
Теперь sys.stdin
— это просто еще один файловый объект, который Python открывает перед запуском вашей программы. Что вы делаете с этим файловым объектом, зависит от вас, но на самом деле он ничем не отличается от любого другого файлового объекта, просто вам не нужен open
.
for something in sys.stdin:
some stuff here
будет выполнять стандартный ввод до тех пор, пока не будет достигнут конец файла. И так будет это:
lines = sys.stdin.readlines()
Ваш первый вопрос действительно касается различных способов использования файлового объекта.
Во-вторых, откуда он читает? Он читает из файлового дескриптора 0 (ноль). В Windows это дескриптор файла 0 (ноль). Файловый дескриптор/дескриптор 0 по умолчанию подключен к консоли или tty, поэтому фактически он читает с клавиатуры. Однако его можно перенаправить, часто с помощью оболочки (например, bash или cmd.exe), используя следующий синтаксис:
myprog.py < input_file.txt
Это изменяет нулевой файловый дескриптор для чтения файла вместо клавиатуры. В UNIX или Linux используется базовый вызов dup2()
. Прочтите документацию по вашей оболочке для получения дополнительной информации о перенаправлении (или, может быть, man dup2
, если вы смелы).
05.04.2015