What is sys.stdin.fileno() in python

Codebender picture Codebender · Aug 25, 2015 · Viewed 16.1k times · Source

I am sorry if it's very basic or already asked before (I googled but couldn't find a simple & satisfactory explanation).

I want to know what sys.stdin.fileno() is?

I saw it in a code and didn't understand what it does. Here's the actual code block,

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

I just executed print sys.stdin.fileno() in my python command line and it returned 0.

I also searched google, and this (nullage.com) is the reference I could find, but it also only says,

fileno() -> integer "file descriptor".

This is needed for lower-level file interfaces, such os.read().

So, what exactly does it mean?

Answer

Yu Hao picture Yu Hao · Aug 25, 2015

File descriptor is a low-level concept, it's an integer that represents an open file. Each open file is given a unique file descriptor.

In Unix, by convention, the three file descriptors 0, 1, and 2 represent standard input, standard output, and standard error, respectively.

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