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之??碌某?? target=
Sep 12 Python
查看Python安装路径以及安装包路径小技巧
Apr 28 Python
开始着手第一个Django项目
Jul 15 Python
浅析AST抽象语法树及Python代码实现
Jun 06 Python
Python使用当前时间、随机数产生一个唯一数字的方法
Sep 18 Python
Python数据结构与算法之图的广度优先与深度优先搜索算法示例
Dec 14 Python
python实现求解列表中元素的排列和组合问题
Mar 15 Python
Flask框架实现给视图函数增加装饰器操作示例
Jul 16 Python
python提取log文件内容并画出图表
Jul 08 Python
Python实现SMTP邮件发送
Jun 16 Python
Python三维绘图之Matplotlib库的使用方法
Sep 20 Python
详解解决jupyter不能使用pytorch的问题
Feb 18 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
杏林同学录(四)
2006/10/09 PHP
Web程序工作原理详解
2014/12/25 PHP
详解WordPress中添加和执行动作的函数使用方法
2015/12/29 PHP
网页自动刷新,不产生嗒嗒声的一个解决方法
2007/03/27 Javascript
Extjs4 消息框去掉关闭按钮(类似Ext.Msg.alert)
2013/04/02 Javascript
JS控件ASP.NET的treeview控件全选或者取消(示例代码)
2013/12/16 Javascript
Chrome下ifame父窗口调用子窗口的问题示例探讨
2014/03/17 Javascript
javascript在IE下trim函数无法使用的解决方法
2014/09/12 Javascript
jQuery中nextUntil()方法用法实例
2015/01/07 Javascript
JS+CSS实现的漂亮渐变背景特效代码(6个渐变效果)
2016/03/25 Javascript
第三篇Bootstrap网格基础
2016/06/21 Javascript
Vue.js自定义事件的表单输入组件方法
2018/03/08 Javascript
详解使用vue-admin-template的优化历程
2018/05/20 Javascript
详解Vue SPA项目优化小记
2018/07/03 Javascript
JS实现动态添加外部js、css到head标签的方法
2019/06/05 Javascript
js图片无缝滚动插件使用详解
2020/05/26 Javascript
Vue切换div显示隐藏,多选,单选代码解析
2020/07/14 Javascript
vue2.0 watch里面的 deep和immediate用法说明
2020/10/30 Javascript
Django中使用group_by的方法
2015/05/26 Python
Python下的Softmax回归函数的实现方法(推荐)
2017/01/26 Python
python中文乱码不着急,先看懂字节和字符
2017/12/20 Python
pandas groupby 分组取每组的前几行记录方法
2018/04/20 Python
Python实现输入二叉树的先序和中序遍历,再输出后序遍历操作示例
2018/07/27 Python
Python 实现数据结构-循环队列的操作方法
2019/07/17 Python
Python中IP地址处理IPy模块的方法
2019/08/16 Python
python GUI库图形界面开发之PyQt5计数器控件QSpinBox详细使用方法与实例
2020/02/28 Python
南非领先的在线旅行社:Travelstart南非
2016/09/04 全球购物
欧舒丹英国官网:购买欧舒丹护手霜等明星产品
2017/01/17 全球购物
ParcelABC西班牙:包裹运送和快递服务
2019/12/24 全球购物
服装销售人员求职自我评价
2013/09/26 职场文书
《地震中的父与子》教学反思
2014/04/10 职场文书
保护环境的标语
2014/06/09 职场文书
助人为乐道德模范事迹材料
2014/08/16 职场文书
高中升旗仪式演讲稿
2014/09/09 职场文书
MySQL 隔离数据列和前缀索引的使用总结
2021/05/14 MySQL
nginx+lua单机上万并发的实现
2021/05/31 Servers