有一个patch可以将对POSIX openat
函数(以及其他*at
函数,例如fstatat
)的支持添加到标记为{{ 1}}的分辨率为closed
,但是fixed
,os
和posix
模块目前不包含任何这些方法。
这些方法是无竞争条件下有效解决platform
中的this之类的问题和其他语言的标准方法。
这些是否包含在当前某个地方的标准库中?如果没有,将来是否有计划将其包括在内。
答案 0 :(得分:3)
是的,这可以通过将the dir_fd
argument传递给标准os
模块中的各种功能来支持。例如参见os.open()
:
打开文件路径并设置各种标志[...]
此函数可以使用dir_fd参数支持相对于目录描述符的路径。
如果您想使用高级文件对象,例如内置 open()
函数返回的对象,则该函数的文档提供了示例代码,展示了如何使用{{1 }}参数。请注意,opener
和open()
是完全不同的功能,不应混淆。或者,您可以使用os.open()
打开文件,然后将文件描述符号传递给os.fdopen()
或os.open()
。
还应该指出,这目前仅在Unix上有效;检查open()
支持的可移植且面向未来的方法是编写如下代码:
dir_fd
另一方面,我不确定Windows是否甚至允许首先打开目录。您当然不能使用_open()
/_wopen()
来做到这一点,据记载,如果“给定路径是目录”,则失败。为了安全起见,建议您仅在检查if os.open in os.supports_dir_fd:
# Use dir_fd.
else:
# Don't.
支持后才尝试打开目录。