python tarinfo权限位

时间:2011-05-06 13:42:06

标签: python tar

我正在使用tarfile模块检查tar.gz文件中包的权限。 我的问题有两个问题。

权限位值与从ls -l命令获得的值不同。从list命令,值为755。但是我的程序中得到了488。我使用下面的命令功能 -


def checkAndExtratZipFile (value,packageElementInfoList):
    try:
        tar = tarfile.open(value,"r:gz")
        for tarinfo in tar:
            global elementType

            # Populate all information about the element
            name  = tarinfo.name
            size  = tarinfo.size
            perm  = tarinfo.mode
            if tarinfo.isdir():
                eleType = elementType.Directory
            elif tarinfo.issym():
                eleType = elementType.SymbolicLink
            else:
                eleType = elementType.File

            # Populate into list        
            packageElementInfoList.append(packageElementInfo(name,eleType,perm,size))                   

        tar.close()
    except: 
        print "Verification of package %s failed.\n Reason : Not able to read contents in the tar package." % value
        sys.exit(1)

我的系统(在SUSE Linux上运行)将包含要验证的软件包,这些软件包由SUSE / AIX和HP平台创建。所以我需要在Linux Server上验证构建在AIX / HP / Linux平台上的软件包。 Linux上的AIX / HP软件包的权限位非常奇怪。755权限位为33256

感谢任何帮助。

1 个答案:

答案 0 :(得分:6)

您正在看到八进制数的基数10表示:

>>> oct(488)
'0750'

您需要使用stat模块上的属性检查标记:

>>> tarinfo.mode
488
>>> tarinfo.mode & stat.S_IXGRP != 0
True
>>> tarinfo.mode & stat.S_IXOTH != 0
False