在Python中,sys.stdin.fileno()是什么意思?

17

如果这很基础或之前已经询问过(我通过Google搜索但没有找到简单且令人满意的解释),我很抱歉。

我想知道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上搜索过,并找到了一个参考资料(nullage.com),但它只是说:

fileno() -> integer "file descriptor"。

这对于较低级别的文件接口(例如os.read())是必需的。

那么,具体是什么意思呢?


这意味着它对于较低级别的文件接口(例如os.read)是必需的。它是文件的低级别标识符(在所有平台上可能不适用),传统上标准输入具有描述符0,标准输出1和标准错误2,其他文件具有描述符> 2。 os.dup复制描述符(创建文件副本的低级别标识符),而fdopen从低级别描述符创建高级对象。 - skyking
3个回答

25

文件描述符是一个低级概念,它是一个代表打开文件的整数。每个打开的文件都被赋予一个独特的文件描述符。

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

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

2
在类Unix系统中,当您打开一个文件(或“类似文件”的实体)时,系统会使用文件描述符 - 一个整数 - 进行操作。
有三个标准文件描述符 - 标准输入、标准输出和标准错误 - 分别对应文件描述符0、1、2。 fileno()方法返回Python中一个类似文件的对象的文件描述符。

2
文件描述符不仅适用于Python,它是POSIX API的一部分--每种UNIX都有它们。然而,Windows也有类似的句柄概念,大多数情况下与文件描述符同义。因此,在Python中,fileno用于表示两者。它们只是对程序可用数据流的低级抽象引用。
请查看文件描述符维基页面获取更多信息。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接