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

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

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

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

Операция tarfile.extractall () на самом деле завершается неуспешно:

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

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

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

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

Мой пользователь является владельцем файлов, поэтому рекурсивно изменить целевые файлы перед запуском tarfile.extractall. Или я могу использовать shutil.rmtree, чтобы взорвать цель заранее, что является обходным путем я использую сейчас.. Тем не менее, это чувствует себя немного халтурно.

Существует ли более Pythonic способ обработки перезаписи файлов только для чтения в tarfile, используя исключения или нечто подобное?

-121--1191736- Spring - ModelAttribute и имена параметров Как настроить класс Model/Command для привязки к определенным параметрам запроса? Например, у меня есть следующий метод: @ RequestMappint («/success ») Успех ModelAndView (@ ModelAttribute SomeCommand...

Как настроить класс Model/Command для привязки к определенным параметрам запроса?

Например, у меня есть следующий метод:

@RequestMappint("/success")
ModelAndView success(@ModelAttribute SomeCommand command) {
   // process
}

и команда:

class SomeCommand {
   String title
}

он работает нормально для таких запросов, как /success? title = test , когда имена параметров запроса равны именам свойств команды.

Но что, если мне нужно отобразить какое-то другое имя? например, если запрос, например: /success? sk _ title = test .

Как я могу сопоставить параметр запроса sk _ title с полем title моей команды?

Эта команда имеет набор параметров и используется несколькими различными методами (это интеграция с другими устаревшими системами), поэтому получение всех этих параметров в виде @ RequestParam для каждого метода RequestMapped является большой работой и требует слишком большого количества заданий копирования/вставки, что приносит много ошибок и неподдерживаемого кода.

У меня нет контроля над именами входных параметров, это действительно странные имена, как 'sk _ yt _ saf _ amount', поэтому я пытаюсь связать его с более дружественными именами свойств.

PS Я использую слово «command» там в качестве входных данных, чтобы отличить его от модели от концепции ModelAndView.

8
задан Igor Artamonov 30 August 2011 в 01:22
поделиться