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判断windows隐藏文件的方法
Mar 21 Python
使用Python中的线程进行网络编程的入门教程
Apr 15 Python
Python 性能优化技巧总结
Nov 01 Python
Python数据结构之哈夫曼树定义与使用方法示例
Apr 22 Python
一些Centos Python 生产环境的部署命令(推荐)
May 07 Python
Python 中字符串拼接的多种方法
Jul 30 Python
python opencv摄像头的简单应用
Jun 06 Python
Django项目之Elasticsearch搜索引擎的实例
Aug 21 Python
tensorflow2.0保存和恢复模型3种方法
Feb 03 Python
解决python父线程关闭后子线程不关闭问题
Apr 25 Python
pytorch中 gpu与gpu、gpu与cpu 在load时相互转化操作
May 25 Python
python求解汉诺塔游戏
Jul 09 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
星际中一些鲜为人知的详细资料
2020/03/04 星际争霸
php实现和c#一致的DES加密解密实例
2017/07/24 PHP
yii框架数据库关联查询操作示例
2019/10/14 PHP
如何取得中文输入的真实长度?
2006/06/24 Javascript
基于jQuery制作迷你背词汇工具
2010/07/27 Javascript
jquerymobile checkbox及时刷新才能获取其准确值
2012/04/14 Javascript
动态加载dtree.js树treeview(示例代码)
2013/12/17 Javascript
JavaScript动态加载样式表的方法
2015/03/21 Javascript
javascript获取select值的方法分析
2015/07/02 Javascript
js随机生成字母数字组合的字符串 随机动画数字
2015/09/02 Javascript
js+html5实现的自由落体运动效果代码
2016/01/28 Javascript
浅谈String.valueOf()方法的使用
2016/06/06 Javascript
Extjs表单输入框异步校验的插件实现方法
2017/03/20 Javascript
angular使用md5,CryptoJS des加密的方法
2019/06/03 Javascript
JS数组Reduce方法功能与用法实例详解
2020/04/29 Javascript
python使用nntp读取新闻组内容的方法
2015/05/08 Python
Python3操作SQL Server数据库(实例讲解)
2017/10/21 Python
高效使用Python字典的清单
2018/04/04 Python
python实现校园网自动登录的示例讲解
2018/04/22 Python
python自动发送邮件脚本
2018/06/20 Python
python3实现windows下同名进程监控
2018/06/21 Python
python内存监控工具memory_profiler和guppy的用法详解
2019/07/29 Python
Python:slice与indices的用法
2019/11/25 Python
dpn网络的pytorch实现方式
2020/01/14 Python
深入浅析Python 函数注解与匿名函数
2020/02/24 Python
python numpy实现rolling滚动案例
2020/06/08 Python
如何设定的weblogic的热启动模式(开发模式)与产品发布模式
2012/09/08 面试题
土木工程专业个人求职信
2013/12/05 职场文书
会计与审计毕业生自荐信范文
2013/12/30 职场文书
创业大赛策划书
2014/03/01 职场文书
《画》教学反思
2014/04/14 职场文书
乳制品整治工作方案
2014/05/29 职场文书
个人工作作风整改措施思想汇报
2014/10/13 职场文书
学前班幼儿评语大全
2014/12/29 职场文书
我的兄弟姐妹观后感
2015/06/15 职场文书
导游词之湖州-太湖
2019/10/11 职场文书