如何使用 Pathlib 检查文件夹/文件权限
Posted
技术标签:
【中文标题】如何使用 Pathlib 检查文件夹/文件权限【英文标题】:How to check folder / file permissions with 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 存储文件夹的正确权限。
【问题讨论】:
【参考方案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
【讨论】:
如何解释 st_mode 的输出?找不到任何文档... docs.python.org/3/library/stat.html【参考方案3】:也许一些八进制代码可以让我们免于导入额外的库!我们这里的工具是GNU stat
和AND 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:所有者、组和其他人的读取、写入和执行权限。参考资料:
How to get octal file permissions on Linux/Unix command line【讨论】:
以上是关于如何使用 Pathlib 检查文件夹/文件权限的主要内容,如果未能解决你的问题,请参考以下文章