What is sys.stdin.fileno() in python

旧街凉风 提交于 2019-12-04 18:04:07

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!