В моем коде на python скопируйте некоторый установщик на temp и установите его, а затем я хочу удалить временную копию. Я использую функцию «shutil.rmtree», чтобы удалить копию установщика в temp. Иногда я получаю сообщение об ошибке, как «[Ошибка 32] Процесс не может получить доступ к файлу, так как он используется другим процессом»Ошибка при выполнении shutil.rmtree
Как я могу избежать этого? У нас есть способ проверить, что каталог не используется какой-либо другой программой? Если да, то можем ли мы проверить наличие каталога, пока другой процесс не выйдет из управления и не удалит его?
Пожалуйста, помогите мне с образцами кодов! Я довольно новичок в python.
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 в другой command.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
Скопируйте код, в котором вы написали –
Как вы это понимаете? –