биты разрешения Python Tarinfo - PullRequest
1 голос
/ 06 мая 2011

Я использую модуль 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.Поэтому мне нужно проверить пакеты, созданные на платформе AIX / HP / Linux на Linux Server.Биты разрешений пакета AIX / HP в Linux очень странные. Бит разрешения 755 задается как 33256.

. Любая помощь приветствуется.

1 Ответ

6 голосов
/ 06 мая 2011

Вы видите восьмеричное представление в виде base-10:

>>> oct(488)
'0750'

Вам необходимо проверить флаги, используя атрибуты модуля stat:

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