Ошибка при выполнении shutil.rmtree

В моем коде на Python я копирую инсталлятор в temp и устанавливаю его, а затем я хочу удалить временную копию. Я использую функцию "shutil.rmtree", чтобы удалить копию установщика в temp. Иногда я получаю сообщение об ошибке типа "[Ошибка 32] Процесс не может получить доступ к файлу, потому что он используется другим процессом"

Как я могу избежать этого? У нас есть способ проверить, каталог не используется какой-либо другой программой? Если да, можем ли мы проверить наличие каталога, пока другой процесс не выйдет из-под контроля, и удалить его?

Пожалуйста, помогите мне с примерами кодов! Я довольно новичок в питоне.

copy_dst = tempfile.mkdtemp()

if success:
    success = robocopy_file_or_folder(installer_location, copy_dst)

local_path_to_setup = os.path.join(copy_dst, app_folder, 'setup.exe')

if success:
    success, response_text = install_product(local_path_to_setup, success, response_text)
try:
    if success:
        shutil.rmtree(copy_dst, ignore_errors = False, onerror=handle_remove_readonly)
except OSError as e:
    log("      %s\n      Delete installer Local Copy at \"%s\" failed.\n" % (e, copy_dst))
    success = False

Это код!! и "install_product()" установит продукт, вызвав setup.exe в другой команде.robocopy_file_or_folder () - скопирует файлы.

def handle_remove_readonly(func, path, exc):
"""
Changes the access mode of the specified folder to remove read_only
"""
exc_value = exc[1]
if func in (os.rmdir, os.remove) and exc_value.errno == errno.EACCES:
    os.chmod(path, stat.S_IRWXU| stat.S_IRWXG| stat.S_IRWXO) # 0777
    func(path)
else:
    raise

1 ответ

"install_product()"установит продукт, вызвав setup.exe в другом command.robocopy_file_or_folder() - скопирует файлы.

Дождитесь окончания установки и setup.exe выйти, прежде чем пытаться удалить каталог.

Другие вопросы по тегам