What user do python scripts run as in windows? [duplicate]

喜欢而已 提交于 2019-11-26 09:34:19

问题


I\'m trying to have python delete some directories and I get access errors on them. I think its that the python user account doesn\'t have rights?

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

is what I get when I run the script.
I\'ve tried

shutil.rmtree  
os.remove  
os.rmdir

they all return the same error.


回答1:


We've had issues removing files and directories on Windows, even if we had just copied them, if they were set to 'readonly'. shutil.rmtree() offers you sort of exception handlers to handle this situation. You call it and provide an exception handler like this:

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)

You might want to try that.




回答2:


I've never used Python, but I would assume it runs as whatever user executes the script.




回答3:


The scripts have no special user, they just run under the currently logged-in user which executed the script.

Have you tried checking that:

  • you are trying to delete a valid path? and that
  • the path has no locked files?



回答4:


How are you running the script? From an interactive console session? If so, just open up a DOS command window (using cmd) and type 'whoami'. That is who you are running the scripts interactively.

Ok I saw your edits just now...why don't you print the path and check the properties to see if the user account running the scripts has the required privileges?

If whoami does not work on your version of Windows, you may use the environment variables like SET USERNAME and SET DOMAINNAME from your command window.




回答5:


@ThomasH : another brick to the wall.

On unix systems, you have to ensure that parent directory is writeable too. Here is another version :

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



回答6:


If the script is being run as a scheduled task (which seems likely for a cleanup script), it will probably run as SYSTEM. It's (unwise, but) possible to set permissions on directories so that SYSTEM has no access.




回答7:


Simple solution after searching for hours is to check first if that folder actually exist!

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

This did the trick for me.



来源:https://stackoverflow.com/questions/1213706/what-user-do-python-scripts-run-as-in-windows

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!