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


Posted in Python onJune 08, 2020

简单的介绍下linux文件权限

linux中,文件的权限分为"所有者、组、其他用户"三个角色,每个角色由3个bit位表示它的权限,3bit从左到右分别为读写执行三个权限,3bit的值范围为0~7。所以如果直接在linux执行chmod 777 xxx.sh代表,将xxx.sh文件赋予所有者、组、其他用户这三个角色对xxx.sh文件的读写执行权限。

os的chmod

python的os模块负责操作系统层面的操作。修改文件权限可以通过os的chmod方法来操作。
os.chmod(path, mode)
方法的path指向要赋权限的文件或目录;
mode为权限值,也就是文件权限的9位bit的10进制数,取值范围0~511;

比如我们要将xxx.sh文件赋予所有者读权限,其他角色没有任何的权限,则linux中对应的文件权限用ls -l查看为:-r---------;第一个-是文件类型,后面的9个位就代表了整个文件的权限,对应二进制为100000000,那么我们的mode应该取值为256;
所以上面的权限修改代码为os.chmod("xxx.sh",256)。

这么麻烦?

还好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文件赋予所有者读写执行、用户组读执行、其他用户读的操作,即-rwxr-xr--:

import os
import stat

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

什么?感觉常量记不住?还是不方便?

写个类似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 相关文章推荐
使用setup.py安装python包和卸载python包的方法
Nov 27 Python
Python中的map()函数和reduce()函数的用法
Apr 27 Python
Python爬虫工程师面试问题总结
Mar 22 Python
Tensorflow 查看变量的值方法
Jun 14 Python
python计算阶乘和的方法(1!+2!+3!+...+n!)
Feb 01 Python
Python正则表达式和re库知识点总结
Feb 11 Python
python三大神器之fabric使用教程
Jun 10 Python
Python中的上下文管理器相关知识详解
Sep 19 Python
python 计算积分图和haar特征的实例代码
Nov 20 Python
哪种Python框架适合你?简单介绍几种主流Python框架
Aug 04 Python
给numpy.array增加维度的超简单方法
Jun 02 Python
Python中np.random.randint()参数详解及用法实例
Sep 23 Python
win10下python3.8的PIL库安装过程
Jun 08 #Python
python rolling regression. 使用 Python 实现滚动回归操作
Jun 08 #Python
Python selenium爬虫实现定时任务过程解析
Jun 08 #Python
python:HDF和CSV存储优劣对比分析
Jun 08 #Python
Python实现一个简单的毕业生信息管理系统的示例代码
Jun 08 #Python
Python while true实现爬虫定时任务
Jun 08 #Python
python 实现rolling和apply函数的向下取值操作
Jun 08 #Python
You might like
php基础知识:类与对象(4) 范围解析操作符(::)
2006/12/13 PHP
php 调试利器debug_print_backtrace()
2012/07/23 PHP
php笔记之:初探PHPcms模块开发介绍
2013/04/26 PHP
PHP实现文件下载断点续传详解
2014/10/15 PHP
PHP开发APP端微信支付功能
2017/02/17 PHP
面向对象的Javascript之三(封装和信息隐藏)
2012/01/27 Javascript
javascript动态创建表格及添加数据实例详解
2015/05/13 Javascript
js实现Form栏显示全格式时间时钟效果代码
2015/08/19 Javascript
javascript中html字符串转化为jquery dom对象的方法
2015/08/27 Javascript
gameboy网页闯关游戏(riddle webgame)--仿微信聊天的前端页面设计和难点
2016/02/21 Javascript
在JavaScript中模拟类(class)及类的继承关系
2016/05/20 Javascript
超链接怎么正确调用javascript函数
2016/05/23 Javascript
JavaScript数组复制详解
2017/02/02 Javascript
优雅的将ElementUI表格变身成树形表格的方法步骤
2019/04/11 Javascript
vue实现路由切换改变title功能
2019/05/28 Javascript
jquery实现下载图片功能
2019/07/18 jQuery
Vue常用的全选/反选的示例代码
2020/02/19 Javascript
JavaScript onclick事件使用方法详解
2020/05/15 Javascript
[03:36]2015国际邀请赛第二日现场精彩集锦
2015/08/06 DOTA
[04:49]期待西雅图之战 2016国际邀请赛中国区预选赛WINGS战队赛后采访
2016/06/29 DOTA
Pyramid将models.py文件的内容分布到多个文件的方法
2013/11/27 Python
举例讲解Python编程中对线程锁的使用
2016/07/12 Python
深入浅析python 中的匿名函数
2018/05/21 Python
Python3列表内置方法大全及示例代码小结
2019/05/10 Python
Python使用Pandas对csv文件进行数据处理的方法
2019/08/01 Python
Python 批量刷博客园访问量脚本过程解析
2019/08/30 Python
python快速排序的实现及运行时间比较
2019/11/22 Python
python 实现朴素贝叶斯算法的示例
2020/09/30 Python
Python+unittest+requests+excel实现接口自动化测试框架
2020/12/23 Python
小女主人连衣裙:Little Mistress
2017/07/10 全球购物
中学生寄语大全
2014/04/03 职场文书
2014年党员评议表自我评价
2014/09/27 职场文书
治理商业贿赂工作总结
2015/08/10 职场文书
计算机教师工作总结
2015/08/13 职场文书
用Python实现Newton插值法
2021/04/17 Python
Java实现贪吃蛇游戏的示例代码
2022/09/23 Java/Android