Python | os.dup 函數
最近更新時間 2020-12-08 11:25:25
os.dup 函數返回一個文件描述符 fd 的副本。該文件描述符的副本是 不可繼承的。
在 Windows 中,當複製一個標準流(0: stdin, 1: stdout, 2: stderr)時,新的文件描述符是 可繼承的。
文件描述符是一個數字,用於唯一標識計算機操作系統中打開的文件。它描述了數據資源,以及如何訪問該資源。
在類Unix操作系統上,默認情況下,前三個文件描述符為STDIN(標準輸入 0),STDOUT(標準輸出 1)和STDERR(標準錯誤 2)。
可以用 io.fileno() 可以獲得 file object 所對應的文件描述符。需要注意的是,直接使用文件描述符會繞過文件對象的方法,會忽略如數據內部緩衝等情況。
函數定義
os.dup(fd)
# 函數定義
def dup(fd: int) -> int: ...
參數
- checkfd - 文件描述符。
返回值
- checkint - 文件描述符副本。
示例1: - 使用 os.dup() 函數返回文件描述符副本。
# coding=utf-8
# Python3 代碼
# 講解怎樣使用 os.dup() 函數返回文件描述符副本
# 引入 os 庫
import os
# 文件路徑
path = "foo.txt"
# 根據路徑打開文件
fd = os.open(path, os.O_WRONLY)
print("Original file descriptor:", fd)
# 創建副本
dup_fd = os.dup(fd)
print("Duplicated file descriptor:", dup_fd)
# 查看當前進程打開的文件
# UNIX 系統
pid = os.getpid()
os.system("ls -l /proc/%s/fd" %pid)
# 關閉文件描述符
os.close(fd)
os.close(dup_fd)
Original file descriptor: 3 Duplicated file descriptor: 4 總用量 0 lrwx------ 1 root root 64 12月 8 11:21 0 -> /dev/pts/0 lrwx------ 1 root root 64 12月 8 11:21 1 -> /dev/pts/0 lrwx------ 1 root root 64 12月 8 11:21 2 -> /dev/pts/0 l-wx------ 1 root root 64 12月 8 11:21 3 -> /data/python/foo.txt l-wx------ 1 root root 64 12月 8 11:21 4 -> /data/python/foo.txt