问题
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?
回答1:
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
回答2:
On Unix-like systems when you open a file (or a "file-like" entity) the system uses a file descriptor - an integer - on which you operate.
There are three standard file descriptors - standard input, standard output and standard error - with file descriptors 0, 1, 2 respectively.
The fileno()
method returns the file descriptor of a file-like object in python.
回答3:
File descriptors are not unique to python. It's part of the POSIX API -- every flavour of UNIX will have them. However, Windows has similar concept of handles that for the most part is synonymous with file descriptors. Thus in python, fileno
is used to represent both. They are just an low-level abstract reference to streams of data your program has available to it.
Have a look at the at the wiki page on file descriptors for more.
来源:https://stackoverflow.com/questions/32199552/what-is-sys-stdin-fileno-in-python