Python | os.dup2 函數

最近更新時間 2020-12-08 11:49:34

os.dup2 函數把文件描述符 fd 複製為 fd2,必要時先關閉後者。返回 fd2。新的文件描述符默認是 可繼承的,除非在 inheritable 為 False 時,是不可繼承的。

在 3.7 版更改: 成功時返回 fd2,以過去的版本中,總是返回 None。

文件描述符是一個數字,用於唯一標識計算機操作系統中打開的文件。它描述了數據資源,以及如何訪問該資源。

在類Unix操作系統上,默認情況下,前三個文件描述符為STDIN(標準輸入 0),STDOUT(標準輸出 1)和STDERR(標準錯誤 2)。

可以用 io.fileno() 可以獲得 file object 所對應的文件描述符。需要注意的是,直接使用文件描述符會繞過文件對象的方法,會忽略如數據內部緩衝等情況。

函數定義

os.dup2(fd, fd2, inheritable=True)
# 函數定義

if sys.version_info >= (3, 7):
    def dup2(fd: int, fd2: int, inheritable: bool = ...) -> int: ...
else:
    def dup2(fd: int, fd2: int, inheritable: bool = ...) -> None: ...

參數

  • checkfd - 源文件描述符。
  • checkfd2 - 目標文件描述符。
  • checkinheritable - [可選] 默認值為True,表示可以繼承文件描述符。若要使其不可繼承,請將其設置為 False。

返回值

  • checkint - fd2 文件描述符。

示例1: - 使用 os.dup2() 函數複製文件描述符。

# coding=utf-8

# Python3 代碼
# 講解怎樣使用 os.dup2() 函數複製文件描述符

# 引入 os 庫
import os

# 文件路徑
path = "foo.txt"

# 根據路徑打開文件
fd = os.open(path, os.O_WRONLY)
print("Original file descriptor:", fd) 

# 複製文件描述符為 10
dup_fd = 10
ret_val = os.dup2(fd, dup_fd)
print("Return Value:", ret_val) 

# 查看當前進程打開的文件
# UNIX 系統
pid = os.getpid() 
os.system("ls -l /proc/%s/fd" %pid) 

# 關閉文件描述符
os.close(fd) 
os.close(dup_fd) 
Original file descriptor: 3
Return Value: 10
總用量 0
lrwx------ 1 root root 64 12月  8 11:41 0 -> /dev/pts/0
lrwx------ 1 root root 64 12月  8 11:41 1 -> /dev/pts/0
l-wx------ 1 root root 64 12月  8 11:41 10 -> /data/python/foo.txt
lrwx------ 1 root root 64 12月  8 11:41 2 -> /dev/pts/0
l-wx------ 1 root root 64 12月  8 11:41 3 -> /data/python/foo.txt
rss_feed