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将文本转换成图片输出的方法
Apr 28 Python
Django与遗留的数据库整合的方法指南
Jul 24 Python
举例讲解Python中字典的合并值相加与异或对比
Jun 04 Python
Django admin美化插件suit使用示例
Dec 12 Python
Python通过matplotlib画双层饼图及环形图简单示例
Dec 15 Python
numpy使用fromstring创建矩阵的实例
Jun 15 Python
python入门:这篇文章带你直接学会python
Sep 14 Python
十个Python练手的实战项目,学会这些Python就基本没问题了(推荐)
Apr 26 Python
Spring Cloud Feign高级应用实例详解
Dec 10 Python
Python自动化之UnitTest框架实战记录
Sep 08 Python
python+opencv3.4.0 实现HOG+SVM行人检测的示例代码
Jan 28 Python
Pytorch如何切换 cpu和gpu的使用详解
Mar 01 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
PHPShop存在多个安全漏洞
2006/10/09 PHP
PHP不用递归遍历目录下所有文件的代码
2014/07/04 PHP
学习php开源项目的源码指南
2014/12/21 PHP
PHP带节点操作的无限分类实现方法详解
2016/11/09 PHP
Zend Framework入门教程之Zend_Session会话操作详解
2016/12/08 PHP
php使用json-schema模块实现json校验示例
2019/09/28 PHP
奇妙的js
2007/09/24 Javascript
实现png图片和png背景透明(支持多浏览器)的方法
2009/09/08 Javascript
js获取input长度并根据页面宽度设置其大小及居中对齐
2014/08/22 Javascript
js+html5实现canvas绘制简单矩形的方法
2015/06/05 Javascript
第一次接触神奇的Bootstrap表单
2016/07/27 Javascript
JS实现给对象动态添加属性的方法
2017/01/05 Javascript
vue时间格式化实例代码
2017/06/13 Javascript
基于js中style.width与offsetWidth的区别(详解)
2017/11/12 Javascript
细说webpack源码之compile流程-入口函数run
2017/12/26 Javascript
vue组件化中slot的基本使用方法
2019/05/01 Javascript
js刷新页面location.reload()用法详解
2019/12/09 Javascript
编写Python脚本抓取网络小说来制作自己的阅读器
2015/08/20 Python
Python爬虫模拟登录带验证码网站
2016/01/22 Python
CentOS 6.X系统下升级Python2.6到Python2.7 的方法
2016/10/12 Python
Python TCP通信客户端服务端代码实例
2019/11/21 Python
Pytorch在NLP中的简单应用详解
2020/01/08 Python
Python pip install之SSL异常处理操作
2020/09/03 Python
The North Face北面英国官网:美国著名户外品牌
2017/12/13 全球购物
广州御银科技股份有限公司试卷(C++)
2016/11/04 面试题
文明教师事迹材料
2014/01/16 职场文书
护士长竞聘书
2014/03/31 职场文书
细节决定成败演讲稿
2014/05/12 职场文书
大学专科自荐信
2014/06/17 职场文书
司法局2014法制宣传日活动总结
2014/11/01 职场文书
孕妇离婚协议书范本
2014/11/20 职场文书
公司费用报销管理制度
2015/08/04 职场文书
建筑工程挂靠协议书
2016/03/23 职场文书
80后创业总结的9条职场用人思想,记得收藏
2019/08/13 职场文书
Nginx设置HTTPS的方法步骤 443证书配置方法
2022/03/21 Servers
mysql 获取相邻数据项
2022/05/11 MySQL