сбои shutil.rmtree в Windows с 'Доступом отклонены' [копируют]

62
задан BartoszKP 28 July 2016 в 13:21
поделиться

2 ответа

Проверьте этот вопрос:

Какой пользователь запускает скрипты Python как в Windows?

Очевидно, ответ - изменить файл / папку на не быть доступным только для чтения, а затем удалите его.

Вот обработчик onerror () из pathutils.py , упомянутый @Sridhar Ratnakumar в комментариях:

def onerror(func, path, exc_info):
    """
    Error handler for ``shutil.rmtree``.

    If the error is due to an access error (read only file)
    it attempts to add write permission and then retries.

    If the error is for another reason it re-raises the error.

    Usage : ``shutil.rmtree(path, onerror=onerror)``
    """
    import stat
    if not os.access(path, os.W_OK):
        # Is the error an access error ?
        os.chmod(path, stat.S_IWUSR)
        func(path)
    else:
        raise
79
ответ дан 24 November 2019 в 16:46
поделиться

Я бы сказал, реализовать ваше собственное rmtree с os.walk , которое обеспечивает доступ с помощью os.chmod к каждому файлу перед попыткой его удаления.

Примерно так (не проверено):

import os
import stat

def rmtree(top):
    for root, dirs, files in os.walk(top, topdown=False):
        for name in files:
            filename = os.path.join(root, name)
            os.chmod(filename, stat.S_IWUSR)
            os.remove(filename)
        for name in dirs:
            os.rmdir(os.path.join(root, name))
    os.rmdir(top)      
24
ответ дан 24 November 2019 в 16:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: