概述
实例如下:
# -*- 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,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,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 查看文件的读写权限方法所遇到的程序开发问题。
如果您也喜欢它,动动您的小指点个赞吧