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 相关文章推荐
本地文件上传到七牛云服务器示例(七牛云存储)
Jan 11 Python
Python中的自定义函数学习笔记
Sep 23 Python
python生成IP段的方法
Jul 07 Python
Python设计模式之抽象工厂模式
Aug 25 Python
简单学习Python多进程Multiprocessing
Aug 29 Python
Python企业编码生成系统总体系统设计概述
Jul 26 Python
详解Python self 参数
Aug 30 Python
python线程安全及多进程多线程实现方法详解
Sep 27 Python
TensorFlow2.0:张量的合并与分割实例
Jan 19 Python
python+opencv边缘提取与各函数参数解析
Mar 09 Python
Python根据字典的值查询出对应的键的方法
Sep 30 Python
python在package下继续嵌套一个package
Apr 14 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分页函数
2006/07/08 PHP
php结合正则批量抓取网页中邮箱地址
2015/05/19 PHP
PHP编程实现的TCP服务端和客户端功能示例
2018/04/13 PHP
PHP5.6读写excel表格文件操作示例
2019/02/26 PHP
记Laravel调用Gin接口调用formData上传文件的实现方法
2019/12/12 PHP
File文件控件,选中文件(图片,flash,视频)即立即预览显示
2009/04/09 Javascript
使用jquery插件实现图片延迟加载技术详细说明
2011/03/12 Javascript
JQuery1.6 使用方法三
2011/11/23 Javascript
js如何判断不同系统的浏览器类型
2013/10/28 Javascript
JS跨域解决方案之使用CORS实现跨域
2016/04/14 Javascript
基于JS实现textarea中获取动态剩余字数的方法
2016/05/25 Javascript
基于ajax与msmq技术的消息推送功能实现代码
2016/12/26 Javascript
JS原生数据双向绑定实现代码
2017/08/14 Javascript
js + css实现标签内容切换功能(实例讲解)
2017/10/09 Javascript
详解cordova打包成webapp的方法
2017/10/18 Javascript
JavaScript登录验证基础教程
2017/11/01 Javascript
解决element ui select下拉框不回显数据问题的解决
2019/02/20 Javascript
详解vue-cli项目在IE浏览器打开报错解决方法
2020/12/10 Vue.js
[02:44]DOTA2英雄基础教程 魅惑魔女
2014/01/07 DOTA
python三元运算符实现方法
2013/12/17 Python
python 连接sqlite及简单操作
2017/06/30 Python
Mac中Python 3环境下安装scrapy的方法教程
2017/10/26 Python
Python多线程扫描端口代码示例
2018/02/09 Python
python数据分析数据标准化及离散化详解
2018/02/26 Python
利用Python正则表达式过滤敏感词的方法
2019/01/21 Python
详解Ubuntu16.04安装Python3.7及其pip3并切换为默认版本
2019/02/25 Python
Python利用字典破解WIFI密码的方法
2019/02/27 Python
为什么相对PHP黑python的更少
2020/06/21 Python
医学专业大学生求职的自我评价
2013/11/27 职场文书
城市轨道交通工程职业规划书范文
2014/01/18 职场文书
关于读书的演讲稿300字
2014/08/27 职场文书
公务员年度考核评语
2014/12/31 职场文书
写给医院的感谢信
2015/01/22 职场文书
2016年清明节红领巾广播稿
2015/12/17 职场文书
golang slice元素去重操作
2021/04/30 Golang
PHP设计模式(观察者模式)
2021/07/07 PHP