Python3通过chmod修改目录或文件权限的方法示例

听雨眠
听雨眠
发布时间:2026-10-14| 2人浏览过
原创

本文介绍Python3中修改文件或目录权限的两种主要方式:通过os.chmod方法直接设置权限值,以及利用stat模块提供的常量简化操作。针对递归修改目录权限的需求,推荐使用subprocess模块调用系统chmod命令。文章包含具体代码示例及权限常量说明,帮助开发者快速掌握权限管理技巧。

简要介绍Linux系统中的文件权限机制。

在Linux系统中,文件权限被划分为“所有者”、“组用户”和“其他用户”三个角色。每个角色由3个二进制位(bit)表示其权限,这3个位从左至右分别对应读(Read)、写(Write)和执行(Execute)权限。3位二进制数的取值范围为0到7。因此,在Linux命令行中执行“chmod 777 xxx.sh”,意味着将xxx.sh文件的读、写、执行权限同时赋予所有者、组用户以及其他所有用户。

使用os模块的chmod函数。

Python的os模块负责处理操作系统层面的交互操作。要修改文件权限,可以使用os模块提供的chmod方法。其基本语法为:os.chmod(path, mode)。其中,path参数指定需要修改权限的文件或目录路径;mode参数为权限值,即文件9位权限对应的十进制数值,取值范围是0到511。

例如,若要将xxx.sh文件设置为仅所有者拥有读权限,其他角色无任何权限,在Linux中使用“ls -l”命令查看的结果为“-r---------”。这里的第一个“-”代表文件类型,随后的9位代表具体权限,对应的二进制值为100000000。此时,mode参数的取值应为256。因此,对应的Python修改权限代码为:os.chmod("xxx.sh", 256)。

这种手动计算十进制值的方式是否过于繁琐?

幸运的是,Python的stat模块提供了预定义的常量,可以直接对应使用,无需手动计算。

常量 描述
S_IRWXU 所有者读写执行权限,代表值:448
S_IRUSR 所有者读,代表值:256
S_IWUSR 所有者写,代表值:128
S_IXUSR 所有者执行,代表值:64
S_IRWXG 用户组读写执行权限,代表值:56
S_IRGRP 用户组读,代表值:32
S_IWGRP 用户组写,代表值:16
S_IXGRP 用户组执行,代表值:8
S_IRWXO 其他用户读写执行,代表值:7
S_IROTH 其他用户读,代表值:4
S_IWOTH 其他用户写,代表值:2
S_IXOTH 其他用户执行,代表值:1

以下代码展示了如何将xxx.sh文件设置为:所有者拥有读写执行权限,用户组拥有读和执行权限,其他用户仅拥有读权限。对应的Linux权限字符串为“-rwxr-xr--”:


import os
import stat

os.chmod("xxx.sh", stat.S_IRWXU+stat.S_IRGRP+stat.S_IXGRP+stat.S_IROTH)

如果觉得这些常量难以记忆,或者使用不够便捷怎么办?

可以编写一个类似Linux“chmod 777”命令使用方式的工具函数(util)。


import re
import os
import stat

RD, WD, XD = 4, 2, 1
BNS = [RD, WD, XD]
MDS = [
  [stat.S_IRUSR, stat.S_IRGRP, stat.S_IROTH],
  [stat.S_IWUSR, stat.S_IWGRP, stat.S_IWOTH],
  [stat.S_IXUSR, stat.S_IXGRP, stat.S_IXOTH]
]

def chmod(path, mode):
  if isinstance(mode, int):
    mode = str(mode)
  if not re.match("^[0-7]{1,3}$", mode):
    raise Exception("mode does not conform to ^[0-7]{1,3}$ pattern")
  mode = "{0:0>3}".format(mode)
  mode_num = 0
  for midx, m in enumerate(mode):
    for bnidx, bn in enumerate(BNS):
      if (int(m) & bn) > 0:
        mode_num += MDS[bnidx][midx]
  os.chmod(path, mode_num)

if __name__ == '__main__':
  chmod("xxx.sh", "744") #744代表所有者读写执行,组和其他的权限只有读

类似地,你也可以扩展该工具函数,使其支持类似“chmod u+rwx,g+rw,o+rw xxx.sh”这种更细致的权限指定方式。

注意:os.chmod方法似乎不支持递归修改目录下所有文件的权限。如果需要递归修改,可以使用subprocess模块直接调用系统命令。

通过subprocess模块直接调用chmod命令。

subprocess模块用于运行子进程。它允许在子进程中调用操作系统命令或执行Shell脚本,并获取标准输出(stdout)和标准错误(stderr)。


import subprocess

if __name__ == '__main__':
  cmd = ['chmod', "-R", "777", "xxx.sh"]
  res = subprocess.run(cmd, universal_newlines=True, stdout=subprocess.PIPE,
             stderr=subprocess.PIPE, shell=False)

  print(res.returncode, res.stdout, res.stderr)

至此,关于Python3通过chmod修改目录或文件权限的方法示例介绍完毕。更多相关Python3 chmod修改目录或文件权限内容请搜索本站以前的文章或继续浏览下面的相关文章,希望大家以后多多支持本站!

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。