Я пытаюсь удалить каталог с помощью Python и запустить PermissionError при попытке удалить определенные файлы.
Я попытался использовать shutil.rmtree
, subprocess.call
, subprocess.run
, изменив разрешения (следуя приведенным ниже инструкциям, включая изменение разрешений и запуск моей IDE с повышенными привилегиями)
Удалить файл или папку
"rm -rf" эквивалент для Windows?
Удаление каталога в Python
Ошибка shutil.rmtree в Windows с «Доступ запрещен»
Наконец, и, возможно, наиболее информативно, я создал BAT-файл, который называет Windows rmdir
. Файл BAT (называемый remove_MLS.bat
) успешно рекурсивно удаляет все файлы и сам каталог при вызове из командной строки или двойном щелчке. Однако тот же пакетный файл завершается ошибкой с PermissionError
при вызове с помощью Python с использованием subprocess
методов
У меня такое чувство, что это проблема уровня привилегий интерпретатора python, но я не хочу менять это напрямую по соображениям безопасности.
Код пакетного файла Windows (выполняется правильно при вызове cmd.exe):
rmdir /s /q "C:\Users\<me>\PycharmProjects\Mixed Lot\dist\Mixed Lot Sheet Maker"
Python-код для запуска командного файла:
from subprocess import run
run(r"C:\Users\<me>\PycharmProjects\Mixed Lot\remove_MLS.bat")
, который возвращает следующую ошибку:
C:\Users\<me>\PycharmProjects\Mixed Lot\dist\Mixed Lot Sheet Maker\api-ms-win-crt-utility-l1-1-0.dll - Access is denied.
C:\Users\<me>\PycharmProjects\Mixed Lot\dist\Mixed Lot Sheet Maker\libcrypto-1_1-x64.dll - Access is denied.
C:\Users\<me>\PycharmProjects\Mixed Lot\dist\Mixed Lot Sheet Maker\libssl-1_1-x64.dll - Access is denied.
C:\Users\<me>\PycharmProjects\Mixed Lot\dist\Mixed Lot Sheet Maker\pyodbc.cp37-win_amd64.pyd - Access is denied.
C:\Users\<me>\PycharmProjects\Mixed Lot\dist\Mixed Lot Sheet Maker\pywintypes37.dll - Access is denied.
C:\Users\<me>\PycharmProjects\Mixed Lot\dist\Mixed Lot Sheet Maker\select.pyd - Access is denied.
C:\Users\<me>\PycharmProjects\Mixed Lot\dist\Mixed Lot Sheet Maker\tcl86t.dll - Access is denied.
Я ожидаю, что BAT-файл будет выполняться одинаково, независимо от того, вызывается он Python или нет (w.r.t. удаление файлов).