Python 查看文件的读写权限方法


Posted in Python onJanuary 23, 2018

实例如下:

# -*- coding: utf-8 -*-
# @author flynetcn
import sys, os, pwd, stat, datetime;
LOG_FILE = '/var/log/checkDirPermission.log';
nginxWritableDirs = [
'/var/log/nginx',
'/usr/local/www/var',
];
otherReadableDirs = [
'/var/log/nginx',
'/usr/local/www/var/log',
];
dirs = [];
files = [];
def logger(level, str):
	logFd = open(LOG_FILE, 'a');
	logFd.write(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')+": "+("WARNING " if level else "NOTICE ")+str);
	logFd.close();
def walktree(top, callback):
	for f in os.listdir(top):
		pathname = os.path.join(top, f);
		mode = os.stat(pathname).st_mode;
		if stat.S_ISDIR(mode):
			callback(pathname, True);
			walktree(pathname, callback);
		elif stat.S_ISREG(mode):
			callback(pathname, False);
		else:
			logger(1, "walktree skipping %s\n" % (pathname));
def collectPath(path, isDir=False):
	if isDir:
		dirs.append(path);
	else:
		files.append(path);
	
def checkNginxWritableDirs(paths):
	uid = pwd.getpwnam('nginx').pw_uid;
	gid = pwd.getpwnam('nginx').pw_gid;
	for d in paths:
		dstat = os.stat(d);
		if dstat.st_uid != uid:
			try:
				os.chown(d, uid, gid);
			except:
				logger(1, "chown(%s, nginx, nginx) failed\n" % (d));
def checkOtherReadableDirs(paths, isDir=False):
	for d in paths:
		dstat = os.stat(d);
		if isDir:
			checkMode = 5;
			willBeMode = dstat.st_mode | stat.S_IROTH | stat.S_IXOTH;
		else:
			checkMode = 4;
			willBeMode = dstat.st_mode | stat.S_IROTH;
		if int(oct(dstat.st_mode)[-1:]) & checkMode != checkMode:
			try:
					os.chmod(d, willBeMode);
			except:
				logger(1, "chmod(%s, %d) failed\n" % (d, oct(willBeMode)));
if __name__ == "__main__":
	for d in nginxWritableDirs:
		walktree(d, collectPath)
	dirs = dirs + files;
	checkNginxWritableDirs(dirs);
	dirs = [];
	files = [];
	for d in otherReadableDirs:
		walktree(d, collectPath)
	checkOtherReadableDirs(dirs, True);
	checkOtherReadableDirs(files, False);

os.chmod(path,mode) 这个方法应该很简单,只需要2个参数,一个是路径,一个是说明路径的模式,下面列出了这个用法中可以使用的一些常用的模式:

stat.S_ISUID: Set user ID on execution. 不常用

stat.S_ISGID: Set group ID on execution. 不常用

stat.S_ENFMT: Record locking enforced. 不常用

stat.S_ISVTX: Save text image after execution. 在执行之后保存文字和图片

stat.S_IREAD: Read by owner. 对于拥有者读的权限

stat.S_IWRITE: Write by owner. 对于拥有者写的权限

stat.S_IEXEC: Execute by owner. 对于拥有者执行的权限

stat.S_IRWXU: Read, write, and execute by owner. 对于拥有者读写执行的权限

stat.S_IRUSR: Read by owner. 对于拥有者读的权限

stat.S_IWUSR: Write by owner. 对于拥有者写的权限

stat.S_IXUSR: Execute by owner. 对于拥有者执行的权限

stat.S_IRWXG: Read, write, and execute by group. 对于同组的人读写执行的权限

stat.S_IRGRP: Read by group. 对于同组读的权限

stat.S_IWGRP: Write by group. 对于同组写的权限

stat.S_IXGRP: Execute by group. 对于同组执行的权限

stat.S_IRWXO: Read, write, and execute by others. 对于其他组读写执行的权限

stat.S_IROTH: Read by others. 对于其他组读的权限

stat.S_IWOTH: Write by others. 对于其他组写的权限

stat.S_IXOTH: Execute by others. 对于其他组执行的权限

>>> os.stat('test')
posix.stat_result(st_mode=33204, st_ino=93328670, st_dev=18L, st_nlink=1, st_uid=30448, st_gid=1000, st_size=0, st_atime=1445932321, st_mtime=1445932321, st_ctime=1445932321)
>>> os.stat('test').st_mode
33204
>>> oct(os.stat('test').st_mode)
'0100664'
>>> oct(os.stat('test').st_mode)[-3:]
'664'

以上这篇Python 查看文件的读写权限方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python爬虫框架scrapy实战之爬取京东商城进阶篇
Apr 24 Python
Python装饰器实现几类验证功能做法实例
May 18 Python
python进程管理工具supervisor的安装与使用教程
Sep 05 Python
使用sklearn之LabelEncoder将Label标准化的方法
Jul 11 Python
Python面向对象之静态属性、类方法与静态方法分析
Aug 24 Python
Python多线程应用于自动化测试操作示例
Dec 06 Python
python 格式化输出百分号的方法
Jan 20 Python
使用celery执行Django串行异步任务的方法步骤
Jun 06 Python
python关于变量名的基础知识点
Mar 03 Python
Python实现获取当前目录下文件名代码详解
Mar 10 Python
TensorFlow2.0使用keras训练模型的实现
Feb 20 Python
python图像处理基本操作总结(PIL库、Matplotlib及Numpy)
Jun 08 Python
Python3 中文文件读写方法
Jan 23 #Python
Python3之文件读写操作的实例讲解
Jan 23 #Python
Python实现邮件的批量发送的示例代码
Jan 23 #Python
python实现自动发送邮件发送多人、群发、多附件的示例
Jan 23 #Python
python正则表达式面试题解答
Apr 28 #Python
Django中使用celery完成异步任务的示例代码
Jan 23 #Python
python3 发送任意文件邮件的实例
Jan 23 #Python
You might like
晶体管来复再生式二管收音机
2021/03/02 无线电
PHP网页游戏学习之Xnova(ogame)源码解读(一)
2014/06/23 PHP
ThinkPHP表单自动提交验证实例教程
2014/07/18 PHP
php结合web uploader插件实现分片上传文件
2016/05/10 PHP
thinkPHP通用控制器实现方法示例
2017/11/23 PHP
用JavaScrpt实现文件夹简单轻松加密的实现方法图文
2008/09/08 Javascript
js当一个变量为函数时 应该注意的一点细节小结
2011/12/29 Javascript
jQuery照片伸缩效果不影响其他元素的布局
2014/05/09 Javascript
JavaScript实现简单图片滚动附源码下载
2014/06/17 Javascript
javascript三元运算符用法实例
2015/04/16 Javascript
所见即所得的富文本编辑器bootstrap-wysiwyg使用方法详解
2016/05/27 Javascript
Bootstrap table分页问题汇总
2016/05/30 Javascript
BootStrap中Tab页签切换实例代码
2016/05/30 Javascript
Bootstrap中的Dropdown下拉菜单更改为悬停(hover)触发
2016/08/31 Javascript
基于JS组件实现拖动滑块验证功能(代码分享)
2016/11/18 Javascript
浅谈jQuery中的$.extend方法来扩展JSON对象
2017/02/12 Javascript
vue项目使用微信公众号支付总结及遇到的坑
2018/10/23 Javascript
vue-cli3.0 环境变量与模式配置方法
2018/11/08 Javascript
微信小程序学习笔记之跳转页面、传递参数获得数据操作图文详解
2019/03/28 Javascript
JavaScript canvas实现雨滴特效
2021/01/10 Javascript
js实现验证码干扰(静态)
2021/02/22 Javascript
[47:04]LGD vs infamous Supermajor小组赛D组 BO3 第二场 6.3
2018/06/04 DOTA
Python的Django框架中URLconf相关的一些技巧整理
2015/07/18 Python
Python中pygame的mouse鼠标事件用法实例
2015/11/11 Python
python中Pycharm 输出中文或打印中文乱码现象的解决办法
2017/06/16 Python
Python 数据可视化pyecharts的使用详解
2019/06/26 Python
Python Opencv轮廓常用操作代码实例解析
2020/09/01 Python
pycharm激活码免费分享适用最新pycharm2020.2.3永久激活
2020/11/25 Python
python中delattr删除对象方法的代码分析
2020/12/15 Python
前台文员岗位职责及工作流程
2013/11/19 职场文书
会计演讲稿范文
2014/05/23 职场文书
2015年煤矿安全工作总结
2015/05/23 职场文书
2016元旦主持人经典开场白台词
2015/12/03 职场文书
详解TypeScript的基础类型
2022/02/18 Javascript
Mybatis-Plus 使用 @TableField 自动填充日期
2022/04/26 Java/Android
JS前端可视化canvas动画原理及其推导实现
2022/08/05 Javascript