【问题标题】:How do i determine if a file is read only如何确定文件是否为只读
【发布时间】:2019-09-26 20:20:20
【问题描述】:

我正在用 python 编写一个 shell,需要确定一个文件是否对当前用户是只读的。我如何解释给定用户的os.stat(path)[0]。 这在 linux 上并非易事,您可能会因为用户组或其他人而获得写权限。然后是用户在具有组写入的文件组中的用户的概念,但它是具有只读权限的所有者。 我需要它是跨平台的,所以它可以在 Mac Linux 和 Windows 上运行。

【问题讨论】:

  • @jww,我通过编辑改进了这个问题。问得不好
  • 对于Linux和macOS等POSIX系统,使用os.access(filename, os.W_OK)。这应该考虑文件权限和文件属性(例如不变性)。在 Windows 中,os.access 仅检查只读文件属性。在 Windows 中检查写入权限的最简单方法是通过CreateFileW(通过 ctypes 或 PyWin32 的 win32file)打开文件,请求通用写入权限并共享读取、写入和删除权限。

标签: python linux python-3.x windows macos


【解决方案1】:
statinfo = os.stat(path, *, dir_fd=None, follow_symlinks=True)

以下是文档中的描述: https://docs.python.org/3/library/os.html#os.stat

"获取文件或文件描述符的状态。对给定路径执行等效的 stat() 系统调用。路径可以指定为字符串或字节 - 直接或间接通过 PathLike 接口 - 或作为打开的文件描述符。返回一个 stat_result 对象。"

【讨论】:

    【解决方案2】:

    对于那些在 Windows 上偶然发现此评论以查看如何检查文件是否为只读的用户,这是我在 Python 3.7.9 上测试的解决方案:

    FILE_PATH = r"C:\temp\file.txt"
    
    
    def is_file_read_only(path: str) -> bool:
        try:
            open(path, "w")
        except PermissionError:
            return True
        else:
            return False
    
    
    read_only = is_file_read_only(FILE_PATH)
    print(f'File is read only: {read_only}')
    

    【讨论】:

    • 不要这样做。这将清除文件内容
    猜你喜欢
    • 2011-08-26
    • 2015-07-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-30
    • 1970-01-01
    • 2011-04-17
    • 2021-12-17
    • 1970-01-01
    相关资源
    最近更新 更多