我正在编写一个脚本来检查用户目录中文件的权限,如果它们不可接受,我会警告他们,但是我不仅要检查登录用户的权限,还要检查组和其他用户的权限。我怎样才能做到这一点?在我看来,os.access()在Python中只能检查运行脚本的用户的权限。
我正在编写一个脚本来检查用户目录中文件的权限,如果它们不可接受,我会警告他们,但是我不仅要检查登录用户的权限,还要检查组和其他用户的权限。我怎样才能做到这一点?在我看来,os.access()在Python中只能检查运行脚本的用户的权限。
Answers:
您是对的,就像底层访问syscall一样,os.access检查特定的用户(使用真实ID而不是有效ID来解决suid情况)。
os.stat是获取有关文件的更多常规信息(包括每个用户,组和其他用户的权限)的正确方法。返回st_mode的对象的属性os.stat具有文件的权限位。
为了帮助解释这些位,您可能需要使用stat模块。具体来说,你要定义的位掩码在这里,你会使用&操作符(位和)使用它们在屏蔽掉相关的位st_mode属性-例如,如果你只需要在真/假支票某个文件是否可以组可读,一种方法是:
import os
import stat
def isgroupreadable(filepath):
st = os.stat(filepath)
return bool(st.st_mode & stat.S_IRGRP)
请注意:os.stat通话可能会有些昂贵,因此请确保通过一次通话提取您关心的所有信息,而不是继续对感兴趣的每一部分重复通话;-)。
只是为了帮助像我这样的人,他们来这里时有所不同:
import os
import stat
st = os.stat(yourfile)
oct_perm = oct(st.st_mode)
print(oct_perm)
>>> 0o100664 //the last 3 or 4 digits is probably what you want.
您可以通过os.stat(path)与stat解释结果的模块结合使用来检查文件权限。
使用os.access()带有标志os.R_OK,os.W_OK和os.X_OK。
编辑:如果您正在Windows上测试目录权限,请查看此相关问题。