Таким образом, вы использовали Пайтон «предварительно встроенными функции», по-видимому, как это:
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 по умолчанию, поэтому по сути это чтение с клавиатуры. Однако это может быть перенаправлены, часто оболочкой (например, Баш или cmd.exe), используя синтаксис, как это:
myprog.py < input_file.txt
Это изменяет дескриптор файла нулевого чтения файла вместо клавиатуры. В UNIX или Linux используется базовый вызов dup2()
. Прочтите документацию к оболочке для получения дополнительной информации о перенаправлении (или, может быть, man dup2
, если вы храбры).
Вы знакомы с 'input()'? Везде, где 'input()' будет принимать входные данные, это 'sys.stdin'. Это может быть терминал, или он может быть направлен из файла, или он может поступать из вывода другой программы, или может быть что-то еще, в зависимости от того, как вы вызывали программу. – user2357112