перезаписать существующие файлы только для чтения при использовании Tarfile Python

Я пытаюсь использовать модуль Tarfile Python для извлечения архива Tar.GZ.

Я хотел бы, чтобы добыча перезаписать любые целевые файлы, которые они уже существуют - это нормальное поведение Tarfile.

Тем не менее, я ударю нютч в том, что некоторые файлы имеют защиту от записи (например, chmod 550).

TARFILE.EXTRACTALL () Операция на самом деле не удается:

IOError: [Errno 13] Permission denied '/foo/bar/file'

Если я стараюсь удалить файлы из обычной командной строки, я могу сделать это, мне просто нужно ответить на подсказку:

$ rm <filename>
rm: <filename>: override protection 550 (yes/no)? yes

Обычный утитель GNU TAR также обрабатывает эти файлы без усилий - он просто перезаписывает их при вытеснении.

Мой пользователь является владельцем файлов, поэтому его не было бы трудно рекурсивно Chmod целевых файлов перед запуском Tarfile.extrachall. Или я могу использовать PULTIL.RMTREE, чтобы заранее вырыть цель, что это обходной путь, который сейчас использую .. Однако это чувствует немного взлома.

Есть ли более питоновый способ ручки перезаписывать файлы только для чтения в TarFile, используя исключения или что-то подобное?

10
задан Josh Caswell 14 October 2017 в 16:12
поделиться