如何确定文件是否为只读?

7
我正在用Python编写一个Shell,并需要确定当前用户是否对文件只有读取权限。如何根据给定用户解释 os.stat(path)[0]
在Linux上,这并不容易,因为您可能会因为用户组或其他原因获得写入权限。此外,还存在一个概念,即用户在文件组中具有组写入权限,但是作为所有者仅具有只读权限。
我需要跨平台的解决方案,以便在Mac、Linux和Windows上都可以使用。

可能是[在Python中获取文件属性(隐藏,只读,系统,存档)]的重复问题(https://dev59.com/gIXca4cB1Zd3GeqPKpqm)。 - jww
@jww,我用编辑改进了这个问题。之前的提问方式比较不佳。 - phil
5
对于像Linux和macOS这样的POSIX系统,请使用os.access(filename, os.W_OK)。这应该考虑到文件权限和文件属性(例如不可变性)。在Windows中,os.access仅检查只读文件属性。在Windows中检查写入权限的最简单方法是通过CreateFileW打开文件(通过ctypes或PyWin32的win32file),请求一般写访问权限并共享读取、写入和删除访问权限。 - Eryk Sun
@ErykSun最好将其发布为答案,而不仅仅是评论。请注意,无论文件的只读标志如何,它始终会针对“root”用户返回True--请参阅https://unix.stackexchange.com/q/412234/296692。 - user202729
1个回答

3
statinfo = os.stat(path, *, dir_fd=None, follow_symlinks=True)

这是文档中的描述: https://docs.python.org/3/library/os.html#os.stat “获取文件或文件描述符的状态。对给定路径执行stat()系统调用的等效操作。路径可以直接或间接地通过PathLike接口指定为字符串或字节,也可以作为打开的文件描述符。返回一个stat_result对象。”

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接