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实现的检测web服务器健康状况的小程序
Sep 17 Python
Python的类实例属性访问规则探讨
Jan 30 Python
Python实现去除代码前行号的方法
Mar 10 Python
Python访问纯真IP数据库脚本分享
Jun 29 Python
用pickle存储Python的原生对象方法
Apr 28 Python
python机器学习之神经网络(一)
Dec 20 Python
关于python下cv.waitKey无响应的原因及解决方法
Jan 10 Python
在numpy矩阵中令小于0的元素改为0的实例
Jan 26 Python
对python中的try、except、finally 执行顺序详解
Feb 18 Python
python实现将视频按帧读取到自定义目录
Dec 10 Python
在python tkinter界面中添加按钮的实例
Mar 04 Python
python 牛顿法实现逻辑回归(Logistic Regression)
Oct 15 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与MySQL开发的8个技巧小结
2010/12/17 PHP
php实现无限级分类实现代码(递归方法)
2011/01/01 PHP
php实现的XML操作(读取)封装类完整实例
2017/02/23 PHP
阿里云的WindowsServer2016上部署php+apache
2018/07/17 PHP
用JavaScript脚本实现Web页面信息交互
2006/12/21 Javascript
JavaScript保留关键字汇总
2015/12/01 Javascript
javascript this详细介绍
2016/09/19 Javascript
js querySelector() 使用方法
2016/12/21 Javascript
NodeJS遍历文件生产文件列表功能示例
2017/01/22 NodeJs
最适应的vue.js的form提交涉及多种插件【推荐】
2018/08/27 Javascript
vue elementui 实现搜索栏公共组件封装的实例代码
2020/01/20 Javascript
[42:32]Secret vs Optic 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
[02:50]【扭转乾坤,只此一招】DOTA2全新版本永雾林渊开启新篇章
2020/12/24 DOTA
浅析Python中的多进程与多线程的使用
2015/04/07 Python
图文详解WinPE下安装Python
2016/05/17 Python
Python分支结构(switch)操作简介
2018/01/17 Python
利用pandas将numpy数组导出生成excel的实例
2018/06/14 Python
python matplotlib模块基本图形绘制方法小结【直线,曲线,直方图,饼图等】
2020/04/26 Python
python删除某个目录文件夹的方法
2020/05/26 Python
Pytho爬虫中Requests设置请求头Headers的方法
2020/09/22 Python
html5图片上传预览示例分享
2014/04/14 HTML / CSS
美国生日蛋糕店:Bake Me A Wish!
2017/02/08 全球购物
海蓝之谜(LA MER)澳大利亚官方商城:全球高端奢华护肤品牌
2017/10/27 全球购物
国际领先的在线时尚服装和配饰店:DressLily
2019/03/03 全球购物
Tod’s英国官方网站:意大利奢华手工制作手袋和鞋履
2019/03/15 全球购物
巴西一家专门从事家居和装饰的连锁店:Camicado
2019/08/14 全球购物
设计总监岗位职责
2013/12/07 职场文书
银行开业庆典方案
2014/02/06 职场文书
机修工工作职责
2014/02/21 职场文书
项目合作协议书范本
2014/04/16 职场文书
学生会干部自我鉴定2014
2014/09/18 职场文书
践行党的群众路线心得体会
2014/11/05 职场文书
2019年房屋委托租赁合同范本(通用版)!
2019/07/17 职场文书
2019大学生暑期实习心得总结
2019/08/21 职场文书
Linux下搭建SFTP服务器的命令详解
2022/06/25 Servers
Go语言怎么使用变长参数函数
2022/07/15 Golang