Я пытаюсь использовать модуль 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-Как настроить класс 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.