У меня есть файл test.txt
, который находится внутри zip-архива test.zip
. Разрешения на test.txt
вне моего контроля, когда они сжаты, но теперь я хочу, чтобы они были доступны для записи в группе. Я извлекаю файл с помощью Python и не хочу выходить в оболочку.
EDIT:
Вот что у меня так далеко:
import zipfile
z = zipfile.ZipFile('test.zip', 'w')
zi = zipfile.ZipInfo('test.txt')
zi.external_attr = 0777 << 16L
z.writestr(zi, 'FOO')
z.close()
z = zipfile.ZipFile('test.zip', 'r')
for name in z.namelist():
newFile = open(name, "wb")
newFile.write(z.read(name))
newFile.close()
z.close()
Это прекрасно работает на OS X, использующей 2.5.1, но не работает на моем домашнем компьютере (Debian, Python 2.4 и 2.5) или на RHEL 5 с Python 2.4. На любом, кроме OS X, это не ошибка, но и не меняет разрешения. Есть идеи почему? Кроме того, как работает writestr()
? Я знаю, что я использую это неправильно здесь.
Есть ли способ сделать это без os.chmod
(пользователь, извлекающий файл, не имеет прав на использование os.chmod
после его извлечения)? У меня есть полный доступ на запись в zip-файл.
Подробнее:
> ls -l test.zip
-rwxrwxrwx 1 myuser mygroup 2008-11-11 13:24 test.zip
> unzip test.zip
Archive: test.zip
inflating: test.txt
> ls -l test.txt
-rw-r--r-- 1 myuser mygroup 2008-11-11 13:34 test.txt
Пользователь извлекает не myuser
, а в mygroup
.