我正在浏览一个搜索文件的python脚本并列出他们的权限。我仍然是python的学习者,在学习这段代码时,我遇到了以下问题:
在下面的行中,行“mode = stat.SIMODE(os.lstat(file)[stat.ST_MODE])”的含义是什么? 返回“模式”的值是多少?以及它如何在提供权限信息方面发挥作用?如果有人能够解释这一点,将不胜感激。
另外,我需要理解这个段中的嵌套for循环如何在获取文件名和相关权限的所需输出方面起作用?
这里“水平”有什么意义?
如果有人能回答上述问题并提供相关指导,我们将不胜感激。提前谢谢。
整个代码是:
import stat, sys, os, string, commands
try:
#run a 'find' command and assign results to a variable
pattern = raw_input("Enter the file pattern to search for:\n")
commandString = "find " + pattern
commandOutput = commands.getoutput(commandString)
findResults = string.split(commandOutput, "\n")
#output find results, along with permissions
print "Files:"
print commandOutput
print "================================"
for file in findResults:
mode=stat.S_IMODE(os.lstat(file)[stat.ST_MODE])
print "\nPermissions for file ", file, ":"
for level in "USR", "GRP", "OTH":
for perm in "R", "W", "X":
if mode & getattr(stat,"S_I"+perm+level):
print level, " has ", perm, " permission"
else:
print level, " does NOT have ", perm, " permission"
except:
print "There was a problem - check the message above"
答案 0 :(得分:1)
交互式Python解释器shell是一个很好的地方,可以使用Python代码片段来理解它们。例如,要在脚本中获取模式:
>>> import os, stat
>>> os.lstat("path/to/some/file")
posix.stat_result(st_mode=33188, st_ino=834121L, st_dev=2049L, ...
>>> stat.ST_MODE
0
>>> os.lstat("path/to/some/file")[0]
33188
>>> stat.S_IMODE(33188)
420
现在您知道了这些值,请检查Python docs以获取其含义。
以类似的方式,您可以尝试自己回答其他问题。
<强>更新强>
mode
的值是不同mode flags的按位 OR 组合。嵌套循环“手动”构建这些标志的名称,使用getattr
获取其值,然后检查mode
是否包含这些值。