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 相关文章推荐
使用Python的Tornado框架实现一个一对一聊天的程序
Apr 25 Python
python数组过滤实现方法
Jul 27 Python
详解Python import方法引入模块的实例
Aug 02 Python
Python在不同目录下导入模块的实现方法
Oct 27 Python
Python多进程库multiprocessing中进程池Pool类的使用详解
Nov 24 Python
对python 各种删除文件失败的处理方式分享
Apr 24 Python
Python的numpy库下的几个小函数的用法(小结)
Jul 12 Python
Python3从零开始搭建一个语音对话机器人的实现
Aug 23 Python
一行Python代码制作动态二维码的实现
Sep 09 Python
python tornado使用流生成图片的例子
Nov 18 Python
简单了解python filter、map、reduce的区别
Jan 14 Python
Pytorch损失函数nn.NLLLoss2d()用法说明
Jul 07 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
如何开发一个虚拟域名系统
2006/10/09 PHP
php实现用已经过去多长时间的方式显示时间
2015/06/05 PHP
分享PHP计算两个日期相差天数的代码
2015/12/23 PHP
php简单实现数组分页的方法
2016/04/30 PHP
php数据访问之查询关键字
2016/05/09 PHP
JS学习之一个简易的日历控件
2010/03/24 Javascript
jQuery实现的类flash菜单效果代码
2010/05/17 Javascript
使用JS进行目录上传(相当于批量上传)
2010/12/05 Javascript
js倒计时小程序
2013/11/05 Javascript
JavaScript设计模式之外观模式实例
2014/10/10 Javascript
JavaScript改变CSS样式的方法汇总
2015/05/07 Javascript
移除AngularJS下URL中的#字符的方法
2015/06/19 Javascript
Web前端开发之水印、图片验证码
2016/11/27 Javascript
javascript简写常用的12个技巧(可以大大减少你的js代码量)
2020/03/28 Javascript
浅谈Vuejs中nextTick()异步更新队列源码解析
2017/12/31 Javascript
JS实现为动态创建的元素添加事件操作示例
2018/03/17 Javascript
Layer弹出层动态获取数据的方法
2018/08/20 Javascript
Python 列表排序方法reverse、sort、sorted详解
2016/01/22 Python
Python编程之string相关操作实例详解
2017/07/22 Python
用python实现百度翻译的示例代码
2018/03/09 Python
Numpy掩码式数组详解
2018/04/17 Python
Django框架使用mysql视图操作示例
2019/05/15 Python
Mac 使用python3的matplot画图不显示的解决
2019/11/23 Python
python jenkins 打包构建代码的示例代码
2019/11/29 Python
Python 装饰器原理、定义与用法详解
2019/12/07 Python
Python ConfigParser模块的使用示例
2020/10/12 Python
Python爬虫制作翻译程序的示例代码
2021/02/22 Python
鸿星尔克广告词
2014/03/21 职场文书
党员承诺书怎么写
2014/05/20 职场文书
“四风”查摆问题自我剖析材料
2014/09/27 职场文书
2014年团支部工作总结
2014/11/17 职场文书
慰问信模板
2015/02/14 职场文书
旅游投诉信范文
2015/07/02 职场文书
《打电话》教学反思
2016/02/22 职场文书
golang 语言中错误处理机制
2021/08/30 Golang
python index() 与 rindex() 方法的使用示例详解
2022/12/24 Python