#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