2015-08-25 1 views
3

Прошу прощения, если это очень простой или уже заданный вопрос (я искал Google, но не смог найти простое & удовлетворительное объяснение).Что такое sys.stdin.fileno() в python

Я хочу знать, что такое sys.stdin.fileno()?

Я видел это в коде и не понимал, что он делает. Вот фактический код блок,

fileno = sys.stdin.fileno() 
if fileno is not None: 
    new_stdin = os.fdopen(os.dup(fileno)) 

Я только что выполнил print sys.stdin.fileno() в моей командной строке питона и он вернулся 0.

Я также искал Google и this (nullage.com) это ссылка, которую я мог найти, но это также говорит только

fileno() -> целое "дескриптор файла".

Это необходимо для интерфейсов файлов нижнего уровня, таких как os.read().

Итак, что именно это означает?

+0

Это означает, что это необходимо для интерфейсов файлов нижнего уровня (например, 'os.read'). Это идентификатор низкого уровня для файла (и он может быть неприменим ко всем платформам), традиционно стандартная версия имеет дескриптор 0, стандартное 1 и стандартное-err 2, а в других файлах - дескрипторы> 2. 'os.dup' дублирует дескриптор (создает низкоуровневый идентификатор для копии файла), а' fdopen' создает объект высокого уровня из низкоуровневого дескриптора. – skyking

ответ

7

Дескриптор файла - концепция низкого уровня, это целое число, которое представляет собой открытый файл. Каждому открытому файлу присваивается уникальный файловый дескриптор.

В стандарте Unix три дескриптора файла 0, 1 и 2 представляют стандартный ввод, стандартный вывод и стандартную ошибку соответственно.

>>> import sys 
>>> sys.stdin.fileno() 
0 
>>> sys.stdout.fileno() 
1 
>>> sys.stderr.fileno() 
2 
2

В Unix-подобные системы, когда вы открываете файл (или «файл типа» объект) система использует file descriptor - целое число - на котором вы работаете.

Существует три стандартных дескриптора файла - стандартный ввод, стандартный вывод и стандартная ошибка - с файловыми дескрипторами 0, 1, 2 соответственно.

Метод fileno() возвращает файловый дескриптор файлоподобного объекта в python.

0

Дескрипторы файлов не уникальны для python. Это часть POSIX API - каждый вкус UNIX будет иметь их. Однако Windows имеет аналогичную концепцию ручек, которая по большей части является синонимом дескрипторов файлов. Таким образом, в python fileno используется для представления обоих. Это всего лишь абстрактная ссылка низкого уровня на потоки данных, доступных вашей программе.

Посмотрите на странице вики на file descriptors для получения дополнительной информации.