print "Deleting ", temp_dir
try:
os.chmod(temp_dir, stat.S_IRWXU)
shutil.rmtree(temp_dir)
except Exception, e:
print(e)
raise
抛出错误“[错误5]访问被拒绝:'c:\ temp \ metabuild \ common \ build \ build.cmd'”
所有者对文件build.cmd只有读取权限,我添加了chmod行,如代码中所示更改它,但它没有做任何事情,权限仍然相同,有什么帮助吗?感谢。
答案 0 :(得分:0)
在Windows上,即使os.stat
表示您具有写入权限,也可能无法删除文件或目录的原因有很多:
FILE_SHARE_DELETE
共享模式的进程中打开(大多数程序都没有 - 特别是任何使用Python用于文件的POSIX样式API的程序)永远不会使用这种共享模式。)stat
。除非是第一个,否则无法通过Python使用的POSIX-y API确切地知道发生了什么;它不了解Windows共享模式,ACL或任何其他可能存在问题的内容。您将需要使用通过本机Win32 API工作的工具。您可以通过pywin32
(或ctypes
或类似于DLL,如果您真的更喜欢)从Python执行此操作,但您可能想要找出Explorer或各种Sysinternals的问题。首先是工具。
如果您不知道Win32与POSIX不同的所有疯狂方法,请在MSDN上阅读Creating and Opening Files。
此外,如果您在Cygwin Python而不是本机Python下运行此代码,则必须切换;在Cygwin中,你只能访问Cygwin层,它在Windows上模拟一个真正的POSIX环境,并且不允许你访问下面的Win32内容。
无论如何,一旦你知道问题是什么,很可能在你的代码中解决它的唯一方法是再次通过pywin32
删除到Win32 API。或者,如果您尝试执行覆盖共享模式之类的操作,则必须降低到NT层,您必须通过ctypes
访问该层。并且由于您需要的大部分内容都没有真正记录(对于 记录的部分,搜索“驱动程序开发”),您可能需要将C源代码挖掘到Sysinternals工具找出如何强制另一个进程关闭文件,或删除文件,即使其他进程已关闭。