Какой пользователь выполняет скрипты python, как в Windows?

Я пытаюсь удалить python некоторые каталоги, и я получаю ошибки доступа к ним. Я думаю, что учетная запись пользователя python не имеет прав?

WindowsError: [Error 5] Access is denied: 'path'

- это то, что я получаю, когда запускаю script.
Я пробовал

shutil.rmtree  
os.remove  
os.rmdir

все они возвращают ту же ошибку.

Ответ 1

У нас были проблемы с удалением файлов и каталогов в Windows, даже если мы только что скопировали их, если они были настроены на "readonly". shutil.rmtree() предлагает вам сортировку обработчиков исключений для обработки этой ситуации. Вы вызываете его и предоставляете обработчик исключений следующим образом:

import errno, os, stat, shutil

def handleRemoveReadonly(func, path, exc):
  excvalue = exc[1]
  if func in (os.rmdir, os.remove) and excvalue.errno == errno.EACCES:
      os.chmod(path, stat.S_IRWXU| stat.S_IRWXG| stat.S_IRWXO) # 0777
      func(path)
  else:
      raise

shutil.rmtree(filename, ignore_errors=False, onerror=handleRemoveReadonly)

Возможно, вы захотите попробовать.

Ответ 2

Я никогда не использовал Python, но я бы предположил, что он работает, как любой пользователь выполняет script.

Ответ 3

В сценариях нет специального пользователя, они просто запускаются под текущим пользователем, который выполнил script.

Вы пробовали проверить, что:

  • Вы пытаетесь удалить допустимый путь? и что
  • В пути нет заблокированных файлов?

Ответ 4

Как вы используете script? Из сеанса интерактивной консоли? Если это так, просто откройте окно командной строки DOS (с помощью cmd) и введите "whoami". Именно это вы запускаете скрипты в интерактивном режиме.

Хорошо. Я видел ваши изменения только сейчас... почему вы не печатаете путь и не проверяете свойства, чтобы узнать, имеют ли пользовательские учетные записи, выполняющие скрипты, необходимые привилегии?

Если whoami не работает с вашей версией Windows, вы можете использовать переменные среды, такие как SET USERNAME и SET DOMAINNAME из вашего окна команд.

Ответ 5

Если script запускается как запланированная задача (что кажется вероятным для очистки script), оно, вероятно, будет работать как SYSTEM. Это (неразумно, но) возможно установить разрешения на каталоги, чтобы система не имела доступа.

Ответ 6

Являются ли каталоги пустыми, и если эти методы не поддерживают декурсивно удаление содержимого каталога?

Ответ 7

@ThomasH: еще один кирпич к стене.

В системах Unix вы должны гарантировать, что родительский каталог также можно записать. Вот еще одна версия:

def remove_readonly(func, path, exc):
    excvalue = exc[1]
    if func in (os.rmdir, os.remove) and excvalue.errno == errno.EACCES:

        # ensure parent directory is writeable too
        pardir = os.path.abspath(os.path.join(path, os.path.pardir))
        if not os.access(pardir, os.W_OK):
            os.chmod(pardir, stat.S_IRWXU| stat.S_IRWXG| stat.S_IRWXO)

        os.chmod(path, stat.S_IRWXU| stat.S_IRWXG| stat.S_IRWXO) # 0777
        func(path)
    else:
        raise

Ответ 8

Простое решение после поиска часов - сначала проверить, существует ли эта папка!

GIT_DIR="C:/Users/...."
if os.path.exists(GIT_DIR):
    shutil.rmtree(GIT_DIR)

Это помогло мне.