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中使用item()方法遍历字典的例子
Aug 26 Python
Python捕捉和模拟鼠标事件的方法
Jun 03 Python
Django日志模块logging的配置详解
Feb 14 Python
详解Python下ftp上传文件linux服务器
Jun 21 Python
Django中自定义查询对象的具体使用
Oct 13 Python
浅谈Python3实现两个矩形的交并比(IoU)
Jan 18 Python
python求最大公约数和最小公倍数的简单方法
Feb 13 Python
python列表切片和嵌套列表取值操作详解
Feb 27 Python
Pytest单元测试框架如何实现参数化
Sep 05 Python
Pandas中DataFrame交换列顺序的方法实现
Dec 14 Python
聊聊python在linux下与windows下导入模块的区别说明
Mar 03 Python
详解Python常用的魔法方法
Jun 03 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实现图象锐化代码
2007/06/14 PHP
php 连接mssql数据库 初学php笔记
2010/03/01 PHP
window+nginx+php环境配置 附配置搭配说明
2010/12/29 PHP
在Ubuntu 14.04上部署 PHP 环境及 WordPress
2014/09/02 PHP
浅谈PHP中foreach/in_array的使用
2015/11/02 PHP
PHP attributes()函数讲解
2019/02/03 PHP
jquery 上下滚动广告
2009/06/17 Javascript
javascript实现的一个随机点名功能
2014/08/26 Javascript
jquery动态改变div宽度和高度
2015/02/09 Javascript
Angular 4 依赖注入学习教程之FactoryProvider的使用(四)
2017/06/04 Javascript
validationEngine 表单验证插件使用实例代码
2017/06/15 Javascript
微信小程序自定义模态对话框实例详解
2017/08/16 Javascript
vue实现验证码输入框组件
2017/12/14 Javascript
JavaScript canvas基于数组生成柱状图代码实例
2020/03/06 Javascript
详解python开发环境搭建
2016/12/16 Python
在Python中使用gRPC的方法示例
2018/08/08 Python
jupyter notebook 中输出pyecharts图实例
2020/04/23 Python
python 检查数据中是否有缺失值,删除缺失值的方式
2019/12/02 Python
python批量生成身份证号到Excel的两种方法实例
2021/01/14 Python
python利用proxybroker构建爬虫免费IP代理池的实现
2021/02/21 Python
佳能德国网上商店:Canon德国
2017/03/18 全球购物
捷克家居装饰及图书音像购物网站:Velký košík
2018/04/16 全球购物
TripAdvisor台湾:全球最大旅游网站
2018/08/26 全球购物
英国高街奥特莱斯:Highstreet Outlet
2019/11/21 全球购物
平面设计岗位职责
2013/12/14 职场文书
会计学生自我鉴定
2014/02/06 职场文书
中学生打架检讨书
2014/02/10 职场文书
党员公开承诺书
2014/03/25 职场文书
文化活动实施方案
2014/03/28 职场文书
交通事故委托书范本(2篇)
2014/09/21 职场文书
2015年老干部工作总结
2015/04/23 职场文书
公司人事管理制度
2015/08/05 职场文书
2015年度女工工作总结
2015/10/22 职场文书
2016年中秋祝酒词
2015/11/26 职场文书
CSS几步实现赛博朋克2077风格视觉效果
2021/06/16 HTML / CSS
MySQL数据库超时设置配置的方法实例
2021/10/15 MySQL