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中使用SAX解析xml实例
Nov 21 Python
python 简单搭建阻塞式单进程,多进程,多线程服务的实例
Nov 01 Python
pandas 取出表中一列数据所有的值并转换为array类型的方法
Apr 11 Python
每天迁移MySQL历史数据到历史库Python脚本
Apr 13 Python
python进行TCP端口扫描的实现
Dec 21 Python
python解析xml简单示例
Jun 21 Python
如何在 Django 模板中输出 "{{"
Jan 24 Python
基于tensorflow指定GPU运行及GPU资源分配的几种方式小结
Feb 03 Python
浅谈ROC曲线的最佳阈值如何选取
Feb 28 Python
解决Keras自带数据集与预训练model下载太慢问题
Jun 12 Python
Python必须了解的35个关键词
Jul 16 Python
Python利用命名空间解析XML文档
Aug 10 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
《APMServ 5.1.2》使用图解
2006/10/23 PHP
php的4种常见运行方式
2015/03/20 PHP
php使用Jpgraph绘制柱形图的方法
2015/06/10 PHP
Zend Framework教程之Zend_Db_Table_Row用法实例分析
2016/03/21 PHP
微信公众号开发客服接口实例代码
2016/10/21 PHP
ecshop添加菜单及权限分配问题
2017/11/21 PHP
javascript 单选框,多选框美化代码
2008/08/01 Javascript
js 字符串转化成数字的代码
2011/06/29 Javascript
input 和 textarea 输入框最大文字限制的jquery插件
2011/10/27 Javascript
js字符串转换成xml对象并使用技巧解读
2013/04/18 Javascript
js判断选择的时间是否大于今天的代码
2013/08/20 Javascript
javascript中typeof的使用示例
2013/12/19 Javascript
让jQuery与其他JavaScript库并存避免冲突的方法
2013/12/23 Javascript
js实现的倒计时按钮实例
2015/06/24 Javascript
AngularJS Module方法详解
2015/12/08 Javascript
jQuery 跨域访问解决原理案例详解
2016/07/09 Javascript
jquery 动态增加,减少input表单的简单方法(必看)
2016/10/12 Javascript
使用命令行工具npm新创建一个vue项目的方法
2017/12/27 Javascript
vue-cli2 构建速度优化的实现方法
2019/01/08 Javascript
JavaScript ECMA-262-3 深入解析(一):执行上下文实例分析
2020/04/25 Javascript
[04:26]DOTA2上海特锦赛小组赛第二日 TOP10精彩集锦
2016/02/27 DOTA
Python3基础之基本数据类型概述
2014/08/13 Python
机器学习python实战之决策树
2017/11/01 Python
python自动发送邮件脚本
2018/06/20 Python
python初学者,用python实现基本的学生管理系统(python3)代码实例
2019/04/10 Python
Python Web框架之Django框架Model基础详解
2019/08/16 Python
Pandas数据离散化原理及实例解析
2019/11/16 Python
H5混合开发app如何升级的方法
2018/01/10 HTML / CSS
HTML5页面嵌入小程序没有返回按钮及返回页面空白的问题
2020/05/28 HTML / CSS
全天然狗零食:Best Bully Sticks
2016/09/22 全球购物
日本民宿预约平台:STAY JAPAN
2017/07/01 全球购物
Servlet都有哪些方法?主要作用是什么?
2014/03/04 面试题
项目建议书范文
2014/05/12 职场文书
2014年组织部工作总结
2014/11/14 职场文书
管理失职检讨书
2015/05/05 职场文书
创业计划书之奶茶店开店方案范本!
2019/08/06 职场文书