O usuário não scripts python executado como no windows?
-
06-07-2019 - |
Pergunta
Eu estou tentando ter python excluir alguns diretórios e eu recebo erros de acesso sobre eles. Eu acho que é que a conta de usuário python não tem direitos?
WindowsError: [Error 5] Access is denied: 'path'
é o que eu recebo quando eu executar o script.
Eu tentei
shutil.rmtree
os.remove
os.rmdir
todos eles retornam o mesmo erro.
Solução
Nós tivemos problemas removendo arquivos e diretórios no Windows, mesmo se tivéssemos apenas copiou-los, se eles foram definidos para 'somente leitura'. ofertas shutil.rmtree()
você tipo de manipuladores de exceção para lidar com esta situação. Você chamá-lo e fornecer um manipulador de exceção como este:
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)
Você pode querer experimentar isso.
Outras dicas
Eu nunca usei Python, mas eu diria que é executado como qualquer usuário que executa o script.
Os scripts têm nenhum usuário especial, eles apenas correr sob a conectado no momento utilizador que executou o script.
Você já tentou verificar se:
- Você está tentando excluir um caminho válido? e que
- o caminho tem arquivos não bloqueado?
Se o script está sendo executado como uma tarefa agendada (o que parece provável para um script de limpeza), ele irá provavelmente ser executado como SYSTEM. É do (insensatos, mas) possível definir permissões em diretórios para que o sistema não tem acesso.
são os diretórios vazios, e se não fizer essas métodos de apoio decursively exclusão do conteúdo de um diretório?
Como você está executando o script? A partir de uma sessão de console interativo? Se assim for, basta abrir uma janela de comando do DOS (usando cmd) e 'whoami' tipo. Que é que você está executando os scripts de forma interativa.
Ok eu vi suas edições agora ... por que você não imprimir o caminho e verificar as propriedades para ver se a conta de usuário executando os scripts tem os privilégios necessários?
Se whoami não funciona em sua versão do Windows, você pode usar as variáveis ??de ambiente como SET usuário e SET DOMAINNAME de sua janela de comando.
@ThomasH:. Outro tijolo na parede
Sistemas no Unix, você tem que garantir que o diretório pai é gravável também. Aqui está outra versão:
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
Uma solução simples depois de procurar por horas é verificar primeiro se essa pasta realmente existe!
GIT_DIR="C:/Users/...."
if os.path.exists(GIT_DIR):
shutil.rmtree(GIT_DIR)
Este fez o truque para mim.