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中的filter和lambda函数的使用
Apr 07 Python
centos6.7安装python2.7.11的具体方法
Jan 16 Python
Python变量和字符串详解
Apr 29 Python
python调用API实现智能回复机器人
Apr 10 Python
对python:循环定义多个变量的实例详解
Jan 20 Python
对Python _取log的几种方式小结
Jul 25 Python
实例详解Python装饰器与闭包
Jul 29 Python
简单了解Python3 bytes和str类型的区别和联系
Dec 19 Python
Python实现自动访问网页的例子
Feb 21 Python
Keras自定义IOU方式
Jun 10 Python
Python使用内置函数setattr设置对象的属性值
Oct 16 Python
python前后端自定义分页器
Apr 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
ThinkPHP2.0读取MSSQL提示Incorrect syntax near the keyword 'AS'的解决方法
2014/06/25 PHP
php编写批量生成不重复的卡号密码代码
2015/05/14 PHP
JavaScript 轻松搞定快捷留言功能 只需一行代码
2010/04/01 Javascript
23个Javascript弹出窗口特效整理
2011/02/25 Javascript
jQuery中prop()方法用法实例
2015/01/05 Javascript
基于Jquery+div+css实现弹出登录窗口(代码超简单)
2015/10/27 Javascript
个人网站留言页面(前端jQuery编写、后台php读写MySQL)
2016/05/03 Javascript
js数组常用操作方法小结(增加,删除,合并,分割等)
2016/08/02 Javascript
vue的props实现子组件随父组件一起变化
2016/10/27 Javascript
BootStrap的select2既可以查询又可以输入的实现代码
2017/02/17 Javascript
详解JS异步加载的三种方式
2017/03/07 Javascript
基于匀速运动的实例讲解(侧边栏,淡入淡出)
2017/10/17 Javascript
基于javascript中的typeof和类型判断(详解)
2017/10/27 Javascript
以v-model与promise两种方式实现vue弹窗组件
2018/05/21 Javascript
使用vue for时为什么要key【推荐】
2019/07/11 Javascript
使用Angular9和TypeScript开发RPG游戏的方法
2020/03/25 Javascript
jquery插件懒加载的示例
2020/10/24 jQuery
用Python编写一个简单的俄罗斯方块游戏的教程
2015/04/03 Python
python实现NB-IoT模块远程控制
2018/06/20 Python
Python 获取中文字拼音首个字母的方法
2018/11/28 Python
python批量创建指定名称的文件夹
2019/03/21 Python
python查询文件夹下excel的sheet名代码实例
2019/04/02 Python
python 基于wx实现音乐播放
2020/11/24 Python
python之随机数函数的实现示例
2020/12/30 Python
浅谈Python xlwings 读取Excel文件的正确姿势
2021/02/26 Python
欧洲领先的电子和电信零售商和服务提供商:Currys PC World Business
2017/12/05 全球购物
SHEIN美国:购买时髦的女性服装
2020/12/02 全球购物
Blue Nile中国官网:全球知名的钻石和珠宝网络零售商
2020/03/22 全球购物
一份创业计划书范文
2014/02/08 职场文书
现场施工员岗位职责
2014/03/10 职场文书
模范教师事迹材料
2014/12/16 职场文书
国富论读书笔记
2015/06/26 职场文书
2016高考冲刺决心书
2015/09/23 职场文书
2019年特色火锅店的创业计划书模板
2019/08/28 职场文书
Java各种比较对象的方式的对比总结
2021/06/20 Java/Android
SQL Server中常用截取字符串函数介绍
2022/03/16 SQL Server