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中enumerate的用法实例解析
Aug 18 Python
Python中使用PyQt把网页转换成PDF操作代码实例
Apr 23 Python
详解Python3中yield生成器的用法
Aug 20 Python
Python 内置函数memoryview(obj)的具体用法
Nov 23 Python
django js实现部分页面刷新的示例代码
May 28 Python
Linux下python3.7.0安装教程
Jul 30 Python
Scrapy使用的基本流程与实例讲解
Oct 21 Python
Pandas_cum累积计算和rolling滚动计算的用法详解
Jul 04 Python
Ubuntu+python将nii图像保存成png格式
Jul 18 Python
浅谈Python中re.match()和re.search()的使用及区别
Apr 14 Python
Python如何自动获取目标网站最新通知
Jun 18 Python
图神经网络GNN算法
May 11 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 和 XML: 使用expat函数(一)
2006/10/09 PHP
php实现html标签闭合检测与修复方法
2015/07/09 PHP
疯掉了,尽然有js写的操作系统
2007/04/23 Javascript
JQuery 技巧和窍门整理(8个)
2010/04/22 Javascript
jquery命令汇总,方便使用jquery的朋友
2012/06/26 Javascript
js获取url参数值的两种方式
2013/09/10 Javascript
js获取元素相对窗口位置的实现代码
2014/09/28 Javascript
jquery html动态添加的元素绑定事件详解
2016/05/24 Javascript
javascript将中国数字格式转换成欧式数字格式的简单实例
2016/08/02 Javascript
基于jQuery的AJAX和JSON实现纯html数据模板
2016/08/09 Javascript
js插件Jcrop自定义截取图片功能
2016/10/14 Javascript
简单实现bootstrap导航效果
2017/02/07 Javascript
Bootstrap4如何定制自己的颜色和风格
2018/02/26 Javascript
jquery ajaxfileuplod 上传文件 essyui laoding 效果【防止重复上传文件】
2018/05/26 jQuery
NodeJS 将文件夹按照存放路径变成一个对应的JSON的方法
2018/10/17 NodeJs
彻底搞懂并解决vue-cli4中图片显示的问题实现
2020/08/31 Javascript
基于JavaScript实现简单扫雷游戏
2021/01/02 Javascript
Python中的zip函数使用示例
2015/01/29 Python
Django中使用group_by的方法
2015/05/26 Python
python结合selenium获取XX省交通违章数据的实现思路及代码
2016/06/26 Python
Django admin实现图书管理系统菜鸟级教程完整实例
2017/12/12 Python
Python 经典面试题 21 道【不可错过】
2018/09/21 Python
python如何制作英文字典
2019/06/25 Python
深入了解Python枚举类型的相关知识
2019/07/09 Python
Python any()函数的使用方法
2019/10/28 Python
在PyCharm中实现添加快捷模块
2020/02/12 Python
html5 Canvas画图教程(6)—canvas里画曲线之arcTo方法
2013/01/09 HTML / CSS
canvas实现高阶贝塞尔曲线(N阶贝塞尔曲线生成器)
2018/01/10 HTML / CSS
美国在线咖啡、茶和餐厅供应商:LollicupStore
2018/05/04 全球购物
印度尼西亚手表和包包商店:Urban Icon
2019/12/12 全球购物
如何利用find命令查找文件
2015/02/07 面试题
乡镇三项教育实施方案
2014/03/30 职场文书
亚运会口号
2014/06/20 职场文书
视光学专业自荐信
2014/06/24 职场文书
安全温馨提示语大全
2015/07/14 职场文书
CSS3 Tab动画实例之背景切换动态效果
2021/08/23 HTML / CSS