биты разрешений python tarinfo

#python #tar

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

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

Ответ №1:

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

 >>> oct(488)
'0750'
  

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

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