【问题标题】:How to check folder / file permissions with Pathlib如何使用 Pathlib 检查文件夹/文件权限
【发布时间】:2019-10-24 05:16:57
【问题描述】:

是否有与 os.access() 等效的 Pathlib?

如果没有 Pathlib,代码将如下所示:

import os
os.access('my_folder', os.R_OK)  # check if script has read access to folder

但是,在我的代码中,我处理的是 Pathlib 路径,所以我需要这样做(这只是一个示例):

# Python 3.5+
from pathlib import Path
import os

# get path ~/home/github if on Linux
my_folder_pathlib = Path.home() / "github"
os.access(str(my_folder_pathlib), os.R_OK)

str() 的演员阵容有点丑陋。 我想知道是否有纯 Pathlib 解决方案来实现我想要实现的目标?

附言我知道“更容易请求原谅”的原则,但这是更大框架的一部分,我需要尽快知道脚本是否具有对 NAS 存储文件夹的正确权限。

【问题讨论】:

    标签: python python-3.x pathlib


    【解决方案1】:

    从 Python 3.6 开始,os.access() 接受类似路径的对象,因此不再需要 str()https://docs.python.org/3/library/os.html#os.access

    虽然这仍然不是一个纯粹的 Pathlib 解决方案。

    【讨论】:

      【解决方案2】:

      对 Path 对象使用 stat() 方法,然后查找 st_mode 属性。

      Path().stat().st_mode

      【讨论】:

      【解决方案3】:

      也许一些八进制代码可以让我们免于导入额外的库!我们这里的工具是GNU statAND bitwise,但是基本用法没必要知道。

      检查文件读取访问的示例:

      from pathlib import Path
      
      filepath = Path('/path/to/file')
      if not filepath.stat().st_mode & 0o444:
          print(f'{filepath} is not readable. Check permissions.')
      

      八进制权限:

      • 0o444:所有者、组和其他人的读取权限。
      • 0o555:所有者、组和其他人的读写权限。
      • 0o666:所有者、组和其他人的读写权限。
      • 0o777:所有者、组和其他人的读取、写入和执行权限。

      参考资料:

      【讨论】:

        猜你喜欢
        • 2010-10-28
        • 2012-11-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-12-02
        • 2011-08-20
        • 2015-10-16
        • 2015-05-27
        相关资源
        最近更新 更多