除了file對象外,Python還提供對fd的操作,對fd的操作更加底層,fd和Python中的file對象是不同的概念。在介紹file對象時已經提過,調用 f.fileno() 可以獲得一個文件對象的fd,也可以在一個已有的 fd 上在封裝一個 file 對象:f = os.fdopen(fd)。
一些fd是一個進程創(chuàng)建時事先分配好的:
0——進程的stdin
1——進程的stdout
2——進程的stderr
Python中的os模塊對于fd提供了如下的方法:
1. 關閉 fd
os.close(fd)
2. 復制fd
os.dup(fd)
返回一個新的fd1,這個fd1復制了參數(shù)fd。
3. 復制fd
os.dup2(fd, fd2)
將 fd 復制到 fd2,如果 fd2 已經打開,則首先關閉它。
4. 從 fd 到 file 對象
os.fdopen(fd, mode='r', bufsize=-1)
返回一個封裝了fd的Python file 對象,參數(shù) mode 和 bufsize 和內置的open()函數(shù)中的對應參數(shù)含義相同。
5. 從 fd 獲得文件的各種屬性
os.fstat(fd)
返回一個 stat_result 類型的實例 x,和os.stat(path)返回的類型相同,只是這里是通過一個 fd 獲得對應文件的相關屬性。
6. 改變 fd 對應文件的當前位置
os.lseek(fd, pos, how)
效果同 f.seek(pos, how),參數(shù) how 指定了參照點,一共三種,分別是:os.SEEK_SET == 0 (文件起始)、os.SEEK_CUR == 1(當前位置)和os.SEEK_END == 2(文件末尾).
沒有類似 f.tell() 這種,可以直接使用 fd 獲得文件當前位置的函數(shù),實際上使用 os.lseek() 就可以自己實現(xiàn)一個,
os.lseek(fd, 0, os.SEEK_CUR)
就可以返回當前fd 對應文件的位置,且不會對原文件造成影響。
7. 打開文件,獲得fd
os.open(file, flags, mode=0777
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com