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 相关文章推荐
Python3 XML 获取雅虎天气的实现方法
Feb 01 Python
Django自定义过滤器定义与用法示例
Mar 22 Python
快速解决安装python没有scripts文件夹的问题
Apr 03 Python
django自带的server 让外网主机访问方法
May 14 Python
python实现从pdf文件中提取文本,并自动翻译的方法
Nov 28 Python
使用Python操作FTP实现上传和下载的方法
Apr 01 Python
django 使用 PIL 压缩图片的例子
Aug 16 Python
python爬虫 基于requests模块的get请求实现详解
Aug 20 Python
Python如何基于selenium实现自动登录博客园
Dec 16 Python
PyCharm中Matplotlib绘图不能显示UI效果的问题解决
Mar 12 Python
Python 制作自动化翻译工具
Apr 25 Python
python数字类型和占位符详情
Mar 13 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 Try Catch异常测试
2009/03/01 PHP
php-fpm配置详解
2014/02/12 PHP
PHP集成百度Ueditor 1.4.3
2014/11/23 PHP
PHP5.5新特性之yield理解与用法实例分析
2019/01/11 PHP
firefo xml 读写实现js代码
2009/06/11 Javascript
JQuery学习笔录 简单的JQuery
2012/04/09 Javascript
Javascript动态引用CSS文件的2种方法介绍
2014/06/06 Javascript
Node.js实现批量去除BOM文件头
2014/12/20 Javascript
跟我学习javascript的prototype原型和原型链
2015/11/18 Javascript
js实现密码强度检测【附示例】
2016/03/30 Javascript
AngularJS入门教程中SQL实例详解
2016/07/27 Javascript
微信js-sdk预览图片接口及从拍照或手机相册中选图接口用法示例
2016/10/13 Javascript
HTML5基于Tomcat 7.0实现WebSocket连接并实现简单的实时聊天
2016/10/31 Javascript
浅析JavaScript动画模拟拖拽原理
2016/12/09 Javascript
AngularJS使用ng-inlude指令加载页面失败的原因与解决方法
2017/01/19 Javascript
js操作浏览器的参数方法
2017/01/21 Javascript
jquery在vue脚手架中的使用方式示例
2017/08/29 jQuery
React-Native使用Mobx实现购物车功能
2017/09/14 Javascript
JS获取数组中出现次数最多及第二多元素的方法
2017/10/27 Javascript
基于node下的http小爬虫的示例代码
2018/01/11 Javascript
vue自定义全局共用函数详解
2018/09/18 Javascript
iview通过Dropdown(下拉菜单)实现的右键菜单
2018/10/26 Javascript
JavaScript实现随机五位数验证码
2019/09/27 Javascript
详解微信小程序工程化探索之webpack实战
2020/04/20 Javascript
[07:54]DOTA2 MV《我的动力鞋》 ImbaTV 出品
2014/11/21 DOTA
跟老齐学Python之做一个小游戏
2014/09/28 Python
python实现矩阵乘法的方法
2015/06/28 Python
python3编码问题汇总
2016/09/06 Python
python中的set实现不重复的排序原理
2018/01/24 Python
python实现公司年会抽奖程序
2019/01/22 Python
Django ORM判断查询结果是否为空,判断django中的orm为空实例
2020/07/09 Python
澳大利亚新奇小玩意网站:Yellow Octopus
2017/12/28 全球购物
年检委托书
2014/08/30 职场文书
离婚协议书包括哪些内容
2014/10/16 职场文书
2014年居委会工作总结
2014/12/09 职场文书
Win11 Build 21996.1 Dev版怎么样? win11系统截图欣赏
2021/11/21 数码科技