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常用模块用法分析
Sep 08 Python
Python实现把数字转换成中文
Jun 29 Python
Python 基础教程之包和类的用法
Feb 23 Python
flask + pymysql操作Mysql数据库的实例
Nov 13 Python
让Python更加充分的使用Sqlite3
Dec 11 Python
python实现csv格式文件转为asc格式文件的方法
Mar 23 Python
Python生成任意范围任意精度的随机数方法
Apr 09 Python
Django框架模型简单介绍与使用分析
Jul 18 Python
Python3列表List入门知识附实例
Feb 09 Python
简单了解如何封装自己的Python包
Jul 08 Python
Python jieba结巴分词原理及用法解析
Nov 05 Python
Python基础进阶之海量表情包多线程爬虫功能的实现
Dec 17 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
smarty模板嵌套之include与fetch性能测试
2010/12/05 PHP
javascript中的107个基础知识收集整理 推荐
2010/03/29 Javascript
jquery动态增加删除表格行的小例子
2013/11/14 Javascript
Javascript实现获取窗口的大小和位置代码分享
2014/12/04 Javascript
JS数字抽奖游戏实现方法
2015/05/04 Javascript
AngularJS基础学习笔记之简单介绍
2015/05/10 Javascript
jquery实现简单的遮罩层
2016/01/08 Javascript
jquery获取复选框checkbox的值实现方法
2016/05/30 Javascript
Ionic默认的Tabs模板使用实例
2016/08/29 Javascript
JavaScript实现图片瀑布流和底部刷新
2017/01/02 Javascript
vue2.0多条件搜索组件使用详解
2020/03/26 Javascript
浅谈在fetch方法中添加header后遇到的预检请求问题
2017/08/31 Javascript
two.js之实现动画效果示例
2017/11/06 Javascript
详解vue-cli之webpack3构建全面提速优化
2017/12/25 Javascript
JavaScript JMap类定义与使用方法示例
2019/01/22 Javascript
layui富文本编辑器前端无法取值的解决方法
2019/09/18 Javascript
深入理解 ES6中的 Reflect用法
2020/07/18 Javascript
vue-cli4使用全局less文件中的变量配置操作
2020/10/21 Javascript
python Pygame的具体使用讲解
2017/11/03 Python
Python3多进程 multiprocessing 模块实例详解
2018/06/11 Python
对numpy中shape的深入理解
2018/06/15 Python
python从子线程中获得返回值的方法
2019/01/30 Python
pyhanlp安装介绍和简单应用
2019/02/22 Python
Pytorch 实现自定义参数层的例子
2019/08/17 Python
python使用HTMLTestRunner导出饼图分析报告的方法
2019/12/30 Python
Python如何通过百度翻译API实现翻译功能
2020/04/02 Python
使用 HTML5 Canvas 制作水波纹效果点击图片就会触发
2014/09/15 HTML / CSS
荷兰鞋类购物网站:Donelli
2019/05/24 全球购物
投资合作协议书范本
2014/04/17 职场文书
2014年度党员自我评议
2014/09/13 职场文书
党的群众路线教育实践活动心得体会(企业)
2014/11/03 职场文书
2015年度酒店客房部工作总结
2015/05/25 职场文书
2015年学校政教处工作总结
2015/05/26 职场文书
安娜卡列尼娜观后感
2015/06/11 职场文书
靠谱的活动总结
2019/04/16 职场文书
5个pandas调用函数的方法让数据处理更加灵活自如
2022/04/24 Python