Windows PermissionError при попытке удалить файл / каталог через Python, но не напрямую из оболочки - PullRequest
0 голосов
/ 16 мая 2019

Я пытаюсь удалить каталог с помощью 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. удаление файлов).

...