python 中的 sys.stdin.fileno() 是什么

What is sys.stdin.fileno() in python

很抱歉,如果它是非常基本的或者之前已经问过(我 googled 但找不到简单且令人满意的解释)。

我想知道sys.stdin.fileno()是什么?

在代码里看到了,没看懂是干什么的。这是实际的代码块,

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

我刚刚在 python 命令行中执行了 print sys.stdin.fileno(),它返回了 0

我也搜索了google,this (nullage.com)是我能找到的参考,但它也只说,

fileno() -> integer "file descriptor".

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

那么,这到底是什么意思呢?

文件描述符是一个低级概念,它是一个整数,代表一个打开的文件。每个打开的文件都有一个唯一的文件描述符。

在Unix中,按照惯例,三个文件描述符012分别代表标准输入、标准输出和标准错误。

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

在类 Unix 系统上,当您打开文件(或 "file-like" 实体)时,系统会使用一个 file descriptor - 一个整数 - 您可以对其进行操作。

标准文件描述符一共有三种——标准输入、标准输出和标准错误——文件​​描述符分别为0、1、2。

fileno() 方法 returns python 中类文件对象的文件描述符。

文件描述符不是 python 独有的。它是 POSIX API 的一部分——每种 UNIX 版本都有它们。但是,Windows 具有类似的句柄概念,在大多数情况下,句柄是文件描述符的同义词。因此在python中,用fileno来表示两者。它们只是对您的程序可用的数据流的低级抽象引用。

查看 file descriptors 上的维基页面了解更多信息。