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网络编程学习笔记(五):socket的一些补充
Jun 09 Python
Python实现按学生年龄排序的实际问题详解
Aug 29 Python
python如何统计序列中元素
Jul 31 Python
python redis 删除key脚本的实例
Feb 19 Python
如何使用Python实现斐波那契数列
Jul 02 Python
关于pandas的离散化,面元划分详解
Nov 22 Python
Python代码生成视频的缩略图的实例讲解
Dec 22 Python
pytorch实现CNN卷积神经网络
Feb 19 Python
Python os模块常用方法和属性总结
Feb 20 Python
Tensorflow中的图(tf.Graph)和会话(tf.Session)的实现
Apr 22 Python
解决Python3.7.0 SSL低版本导致Pip无法使用问题
Sep 03 Python
python实现scrapy爬虫每天定时抓取数据的示例代码
Jan 27 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
使用apache模块rewrite_module (转)
2007/02/14 PHP
随时给自己贴的图片加文字的php水印
2007/03/16 PHP
PHP的serialize序列化数据以及JSON格式化数据分析
2015/10/10 PHP
phpStudy访问速度慢和启动失败的解决办法
2015/11/19 PHP
浅谈PHP中的数据传输CURL
2016/09/06 PHP
PHP中使用mpdf 导出PDF文件的实现方法
2018/10/22 PHP
Laravel使用scout集成elasticsearch做全文搜索的实现方法
2018/11/30 PHP
javascript getElementsByClassName 和js取地址栏参数
2010/01/02 Javascript
跟着Jquery API学Jquery之一 选择器
2010/04/07 Javascript
js控制input输入字符解析
2013/12/27 Javascript
Bootstrap框架实现广告轮播效果
2016/11/28 Javascript
select下拉框插件jquery.editable-select详解
2017/01/22 Javascript
webpack构建vue项目的详细教程(配置篇)
2017/07/17 Javascript
angularjs http与后台交互的实现示例
2018/12/21 Javascript
node.js express框架简介与实现
2019/07/23 Javascript
使用优化器来提升Python程序的执行效率的教程
2015/04/02 Python
在arcgis使用python脚本进行字段计算时是如何解决中文问题的
2015/10/18 Python
python文件名和文件路径操作实例
2017/09/29 Python
人生苦短我用python python如何快速入门?
2018/03/12 Python
python 接口返回的json字符串实例
2018/03/27 Python
Python中pandas dataframe删除一行或一列:drop函数详解
2018/07/03 Python
python查看模块安装位置的方法
2018/10/16 Python
python numpy 按行归一化的实例
2019/01/21 Python
用Python实现校园通知更新提醒功能
2019/11/23 Python
Python异步编程之协程任务的调度操作实例分析
2020/02/01 Python
Python ini文件常用操作方法解析
2020/04/26 Python
地球上最先进的胡子和头发修剪器:Bevel
2018/01/23 全球购物
澳大利亚100%丝绸多彩度假装商店:TheSwankStore
2019/09/04 全球购物
MySQL面试题
2014/01/12 面试题
环境工程专业自荐信
2014/03/03 职场文书
我的兄弟姐妹观后感
2015/06/15 职场文书
开学第一天的感想
2015/08/10 职场文书
队名及霸气口号大全
2015/12/25 职场文书
修辞手法有哪些?
2019/08/29 职场文书
教你如何用Python实现人脸识别(含源代码)
2021/06/23 Python
Django + Taro 前后端分离项目实现企业微信登录功能
2022/04/07 Python