Python | os.dup 函数

Lasted 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