Python脚本在Windows中运行的用户是什么?

我试图让Python删除一些目录,我得到访问错误。 我认为它的python用户帐户没有权利?

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

是我运行脚本时得到的。
我试过了

 shutil.rmtree os.remove os.rmdir 

他们都返回相同的错误。

我们在Windows上删除文件和目录时遇到了问题,即使我们刚刚复制了它们,如果它们设置为“只读”。 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) 

你可能想尝试一下。

我从来没有使用Python,但我会假设它运行任何用户执行脚本。

这些脚本没有特殊的用户,他们只是在当前登录的执行脚本的用户下运行。

你有没有试过检查:

  • 你正试图删除一个有效的路径? 然后
  • 路径没有锁定的文件?

如果脚本作为计划任务运行(似乎可能是清理脚本),那么它可能会以SYSTEM身份运行。 这是(不明智的,但是)可以设置目录的权限,以便系统无法访问。

这些目录是空的,如果不是这些方法支持递归删除目录的内容?

你如何运行脚本? 从交互式控制台会话? 如果是这样,只要打开一个DOS命令窗口(使用cmd)并输入“whoami”。 这就是你以交互方式运行脚本的人。

好吧,我刚刚看到您的编辑…为什么不打印路径,并检查属性,看运行脚本的用户帐户是否具有所需的权限?

如果whoami不能在您的Windows版本上运行,您可以在命令窗口中使用SET USERNAME和SET DOMAINNAME等环境变量。

@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