Python | os.open 函数

Lasted 2020-12-10 14:05:21

os.open 函数根据 path 路径 和 flags 标志位打开文件,并根据 mode 设置其权限状态。当计算 mode 时,会首先根据当前 umask 值将部分权限去除。本方法返回新文件的描述符。新的文件描述符不可继承。

flag 和 mode 参数说明参见函数定义,常用标志位(如 O_RDONLY 和 O_WRONLY)。在 Windows 上需要添加 O_BINARY 才能以二进制模式打开文件。

本函数适用于底层的 I/O 操作。常规用途请使用内置函数 open(),该函数的 read() 和 write() 方法(及其他方法)会返回 文件对象。要将文件描述符包装在文件对象中,请使用 fdopen()。

函数定义

os.open(path, flags, mode=0o777, *, dir_fd=None)
# 函数定义

def open(file: _PathType, flags: int, mode: int = ..., *, dir_fd: Optional[int] = ...) -> int: ...

# 标志位常量定义
O_RDONLY: int # os.O_RDONLY::0::0x0
O_WRONLY: int # os.O_WRONLY::1::0x1
O_RDWR: int # os.O_RDWR  ::2::0x10
O_APPEND: int # os.O_APPEND::1024::0x10000000000
O_CREAT: int # os.O_CREAT ::64::0x1000000
O_EXCL: int # os.O_EXCL  ::128::0x10000000
O_TRUNC: int # os.O_TRUNC ::512::0x1000000000

O_DSYNC: int    # Unix only
O_RSYNC: int    # Unix only
O_SYNC: int     # Unix only
O_NDELAY: int   # Unix only
O_NONBLOCK: int  # Unix only
O_NOCTTY: int   # Unix only
O_CLOEXEC: int  # Unix only
O_SHLOCK: int   # Unix only
O_EXLOCK: int   # Unix only

O_BINARY: int     # Windows only
O_NOINHERIT: int  # Windows only
O_SHORT_LIVED: int  # Windows only
O_TEMPORARY: int  # Windows only
O_RANDOM: int     # Windows only
O_SEQUENTIAL: int  # Windows only
O_TEXT: int       # Windows only

O_ASYNC: int      # Gnu extension if in C library
O_DIRECT: int     # Gnu extension if in C library
O_DIRECTORY: int  # Gnu extension if in C library
O_NOFOLLOW: int   # Gnu extension if in C library
O_NOATIME: int    # Gnu extension if in C library
O_PATH: int  # Gnu extension if in C library
O_TMPFILE: int  # Gnu extension if in C library
O_LARGEFILE: int  # Gnu extension if in C library

参数

  • checkpath - 文件路径。
  • checkflags - 操作标志位,详细参数参见函数定义。
  • checkmode - [可选参数],默认为 0o777。

返回值

  • checkint - 文件描述符。

示例1: - 使用 os.open() 函数打开文件。

# coding=utf-8

# Python3 代码
# 讲解怎样使用 os.open() 函数打开文件

# 引入 os 库
import os

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

# 权限,可选、八进制
mode = 0o666

# 标志位
flags = os.O_RDWR | os.O_CREAT

# 使用 os.open 函数获取文件描述符
fd = os.open(path, flags, mode)
print("File path opened successfully.") 

# 关闭文件
os.close(fd)
File path opened successfully.