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简单进程锁代码实例
Apr 27 Python
python使用smtplib模块通过gmail实现邮件发送的方法
May 08 Python
Python实现给qq邮箱发送邮件的方法
May 28 Python
将Python代码打包为jar软件的简单方法
Aug 04 Python
python OpenCV学习笔记实现二维直方图
Feb 08 Python
numpy判断数值类型、过滤出数值型数据的方法
Jun 09 Python
Python实现的多叉树寻找最短路径算法示例
Jul 30 Python
python实现植物大战僵尸游戏实例代码
Jun 10 Python
python numpy 常用随机数的产生方法的实现
Aug 21 Python
Python3的socket使用方法详解
Feb 18 Python
Pytorch 使用 nii数据做输入数据的操作
May 26 Python
Python torch.flatten()函数案例详解
Aug 30 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
php stream_get_meta_data返回值
2013/09/29 PHP
PHP过滤★等特殊符号的正则
2014/01/27 PHP
YII2框架中使用yii.js实现的post请求
2017/04/09 PHP
PHP实现求解最长公共子串问题的方法
2017/11/17 PHP
JQuery实现的在新窗口打开链接的方法小结
2010/04/22 Javascript
40个有创意的jQuery图片和内容滑动及弹出插件收藏集之二
2011/12/31 Javascript
Jquery each方法跳出循环,并获取返回值(实例讲解)
2013/12/12 Javascript
JS实现至少包含字母、大小写数字、字符的密码等级的两种方法
2015/02/03 Javascript
JavaScript中的this关键字使用方法总结
2015/03/13 Javascript
JavaScript——DOM操作——Window.document对象详解
2016/07/14 Javascript
聊一聊JS中的prototype
2016/09/29 Javascript
AngularJS入门教程之过滤器用法示例
2016/11/02 Javascript
bootstrap-datetimepicker实现只显示到日期的方法
2016/11/25 Javascript
Vue2.0组件间数据传递示例
2017/03/07 Javascript
ionic2 tabs 图标自定义实例
2017/03/08 Javascript
基于openlayers实现角度测量功能
2020/09/28 Javascript
通过Python爬虫代理IP快速增加博客阅读量
2016/12/14 Python
在Python中字典根据多项规则排序的方法
2019/01/21 Python
Dlib+OpenCV深度学习人脸识别的方法示例
2019/05/14 Python
python实现列表的排序方法分享
2019/07/01 Python
浅析PyTorch中nn.Module的使用
2019/08/18 Python
python科学计算之numpy——ufunc函数用法
2019/11/25 Python
Pandas 解决dataframe的一列进行向下顺移问题
2019/12/27 Python
Python pip install如何修改默认下载路径
2020/04/29 Python
HTML5本地存储之Web Storage应用介绍
2013/01/06 HTML / CSS
浅谈Html5页面打开app的一些思考
2020/03/30 HTML / CSS
美国领先的商务贺卡出版商:The Gallery Collection
2018/02/13 全球购物
Tostadora意大利:定制T恤
2019/04/08 全球购物
银行会计职员个人的自我评价
2013/09/29 职场文书
《爱如茉莉》教后反思
2014/04/12 职场文书
北大自主招生自荐信
2015/03/04 职场文书
护理专业自我评价
2015/03/11 职场文书
新员工辞职信范文
2015/05/12 职场文书
企业宣传稿范文
2015/07/23 职场文书
学校少先队工作总结
2015/08/12 职场文书
Python requests库参数提交的注意事项总结
2021/03/29 Python