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利用paramiko连接远程服务器执行命令的方法
Oct 16 Python
从头学Python之编写可执行的.py文件
Nov 28 Python
scrapy爬虫实例分享
Dec 28 Python
用python处理图片之打开\显示\保存图像的方法
May 04 Python
Python实现朴素贝叶斯分类器的方法详解
Jul 04 Python
python3使用pandas获取股票数据的方法
Dec 22 Python
详解Python传入参数的几种方法
May 16 Python
python数据处理之如何选取csv文件中某几行的数据
Sep 02 Python
python绘制动态曲线教程
Feb 24 Python
python 按钮点击关闭窗口的实现
Mar 04 Python
Django 实现 Websocket 广播、点对点发送消息的代码
Jun 03 Python
详解python中的异常和文件读写
Jan 03 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
利用static实现表格的颜色隔行显示的代码
2007/09/02 PHP
php之Memcache学习笔记
2013/06/17 PHP
Destoon模板制作简明教程
2014/06/20 PHP
php采集神器cURL使用方法详解
2016/02/19 PHP
ThinkPHP框架实现的邮箱激活功能示例
2018/06/15 PHP
gearman管理工具GearmanManager的安装与php使用方法示例
2020/02/27 PHP
Ctrl+Enter提交内容信息
2006/06/26 Javascript
TextArea 控件的最大长度问题(js json)
2009/12/16 Javascript
Jsonp 跨域的原理以及Jquery的解决方案
2010/05/18 Javascript
Javascript中的for in循环和hasOwnProperty结合使用
2013/06/05 Javascript
jQuery对html元素取值与赋值的方法
2013/11/20 Javascript
jquery prop的使用介绍及与attr的区别
2013/12/19 Javascript
jQuery选择器源码解读(四):tokenize方法的Expr.preFilter
2015/03/31 Javascript
浅析JavaScript Array和string的转换(推荐)
2016/05/20 Javascript
jQuery中on绑定事件后引发的事件冒泡问题如何解决
2016/05/25 Javascript
微信小程序 登录实例详解
2017/01/16 Javascript
Google 爬虫如何抓取 JavaScript 的内容
2017/04/07 Javascript
JavaScript实现二维坐标点排序效果
2017/07/18 Javascript
js仿微信抢红包功能
2020/09/25 Javascript
countUp.js实现数字滚动效果
2019/10/18 Javascript
python时间整形转标准格式的示例分享
2014/02/14 Python
ptyhon实现sitemap生成示例
2014/03/30 Python
Python的SimpleHTTPServer模块用处及使用方法简介
2018/01/22 Python
Python常见工厂函数用法示例
2018/03/21 Python
TensorFlow数据输入的方法示例
2018/06/19 Python
python一键去抖音视频水印工具
2018/09/14 Python
Python数据可视化 pyecharts实现各种统计图表过程详解
2019/08/15 Python
探秘TensorFlow 和 NumPy 的 Broadcasting 机制
2020/03/13 Python
日语专业个人的求职信
2013/12/03 职场文书
医院门卫岗位职责
2013/12/30 职场文书
中学生班主任评语
2014/01/30 职场文书
运动会跳远加油稿
2014/02/20 职场文书
服务口号大全
2014/06/11 职场文书
青年文明号申报材料
2014/12/23 职场文书
Log4j.properties配置及其使用
2021/08/02 Java/Android
Python开发五子棋小游戏
2022/05/02 Python