内置 open() 函数中的 opener 参数有什么用?

问题描述 投票:0回答:2

我正在使用 python 3.5 中的 open 函数。我不明白 open 函数中 opener 参数(最后一个参数)的用法。根据 python 文档:可以通过传递可调用作为开启器来使用自定义开启器。

open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)

有人可以通过示例解释我为什么需要开场白吗?

python
2个回答
2
投票

请参阅文档此处。 他们给出的例子如下:

import os
dir_fd = os.open('somedir', os.O_RDONLY)
def opener(path, flags):
    return os.open(path, flags, dir_fd=dir_fd)

with open('spamspam.txt', 'w', opener=opener) as f:
    print('This will be written to somedir/spamspam.txt', file=f)

os.close(dir_fd)  # don't leak a file descriptor

这个特定示例的作用是创建一个开启器,该开启器将始终采用路径并将它们解释为相对于您选择的给定目录(

somedir
)。 您可以想象使用更复杂的逻辑根据文件类型来查找特定目录,或者根据文件名的前几个字符将大量文件分成目录结构,并编写一个特定的函数作为您的打开器来定位它们。 所有这些都将文件定位逻辑封装到一个函数中作为您的开启器。


0
投票

opener 可用于创建默认所有权以外的文件 和权限:

def _dminopener(path: str, flags: int) -> int:
    """opener for open() rw-rw---- and adm (4) group"""
    f = os.open(path, flags, mode=0o660)
    os.chown(-1,4)
    return f
© www.soinside.com 2019 - 2024. All rights reserved.