Ошибка при выполнении 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
выйти, прежде чем пытаться удалить каталог.