2015-08-25 187 views
3

如果它非常基本或以前已經詢問過(我使用Google搜索,但找不到簡單的&令人滿意的解釋),我很抱歉。python中的sys.stdin.fileno()是什麼

我想知道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

我還搜查谷歌和this (nullage.com)是我能找到的參考,但它也只是說,

的fileno() - >整數 「文件描述符」。

這對於較低級別的文件接口(例如os.read())是必需的。

那麼究竟是什麼意思?

+0

這意味着它需要較低級別的文件接口(如'os.read')。它是文件的低級別標識符(並且它可能不適用於所有平臺),傳統上標準輸入具有描述符0,標準輸出1和標準錯誤2,而其他文件具有> 2的描述符。 'os.dup'複製一個描述符(爲文件副本創建一個低級標識符),'fdopen'從低級描述符創建一個高級對象。 – skyking

回答

7

文件描述符是一個低級概念,它是一個表示打開文件的整數。每個打開的文件都有一個唯一的文件描述符。

在Unix中,按照慣例,三個文件描述符0,12分別代表標準輸入,標準輸出和標準錯誤。

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

就當你打開一個文件(或「類似文件」的實體)的類Unix系統,該系統採用了file descriptor - 一個整數 - 在其上運行。

有三個標準文件描述符 - 標準輸入,標準輸出和標準錯誤 - 分別帶有文件描述符0,1,2。

fileno()方法返回python中類文件對象的文件描述符。

0

文件描述符不是Python獨有的。它是POSIX API的一部分 - 每種UNIX都有它們。但是,Windows有類似的處理概念,大部分與文件描述符是同義的。因此在Python中,fileno用於表示兩者。它們只是對程序可用的數據流的低級抽象引用。

查看更多關於file descriptors的維客頁面。