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的Tornado框架实现数据可视化的教程
May 02 Python
Pyqt实现无边框窗口拖动以及窗口大小改变
Apr 19 Python
Python 实现在文件中的每一行添加一个逗号
Apr 29 Python
Python使用win32 COM实现Excel的写入与保存功能示例
May 03 Python
python 画三维图像 曲面图和散点图的示例
Dec 29 Python
python多线程高级锁condition简单用法示例
Nov 07 Python
解决os.path.isdir() 判断文件夹却返回false的问题
Nov 29 Python
Python pygame绘制文字制作滚动文字过程解析
Dec 12 Python
Python字符串、列表、元组、字典、集合的补充实例详解
Dec 20 Python
matlab中imadjust函数的作用及应用举例
Feb 27 Python
Python unittest 自动识别并执行测试用例方式
Mar 09 Python
python使用matplotlib绘制图片时x轴的刻度处理
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
安装apache2.2.22配置php5.4(具体操作步骤)
2013/06/26 PHP
php字符串替换函数substr_replace()用法实例
2015/03/17 PHP
js之WEB开发调试利器:Firebug 下载
2007/01/13 Javascript
javascript类继承机制的原理分析
2009/09/12 Javascript
javascript replace()正则替换实现代码
2010/02/26 Javascript
基于JQuery实现鼠标点击文本框显示隐藏提示文本
2012/02/23 Javascript
JS.findElementById()使用介绍
2013/09/21 Javascript
JavaScript网页定位详解
2014/01/13 Javascript
js兼容火狐获取图片宽和高的方法
2015/05/21 Javascript
jQuery仿淘宝网产品品牌隐藏与显示效果
2015/09/01 Javascript
轻松实现js图片预览功能
2016/01/18 Javascript
Document.body.scrollTop的值总为零的快速解决办法
2016/06/09 Javascript
JavaScript6 let 新语法优势介绍
2016/07/15 Javascript
总结javascript中的六种迭代器
2016/08/16 Javascript
JS实现点击网页判断是否安装app并打开否则跳转app store
2016/11/18 Javascript
JS中如何实现复选框全选功能
2016/12/19 Javascript
深入理解移动前端开发之viewport
2018/10/19 Javascript
Vue混入mixins滚动触底的方法
2019/11/22 Javascript
js实现表格数据搜索
2020/08/09 Javascript
vue使用keep-alive实现组件切换时保存原组件数据方法
2020/10/30 Javascript
[27:39]Ti4 循环赛第二日 LGD vs Fnatic
2014/07/11 DOTA
[47:06]DOTA2上海特级锦标赛主赛事日 - 4 败者组第五轮 MVP.Phx VS EG第一局
2016/03/05 DOTA
详解如何使用Python编写vim插件
2017/11/28 Python
python实现kmp算法的实例代码
2019/04/03 Python
python支持多线程的爬虫实例
2019/12/21 Python
Python OrderedDict字典排序方法详解
2020/05/21 Python
深入解析HTML5 Canvas控制图形矩阵变换的方法
2016/03/24 HTML / CSS
世界上最受欢迎的钓鱼诱饵:Rapala
2019/05/02 全球购物
通用C#笔试题附答案
2016/11/26 面试题
工程项目经理岗位职责
2013/12/15 职场文书
小学英语教学反思案例
2014/02/04 职场文书
大学生个人实习的自我评价
2014/02/15 职场文书
党的群众路线教育实践活动个人整改措施材料
2014/11/04 职场文书
JavaScript实现简单计时器
2021/06/22 Javascript
vue-cil之axios的二次封装与proxy反向代理使用说明
2022/04/07 Vue.js
MySQL数据库之存储过程 procedure
2022/06/16 MySQL