Python脚本不能删除Windows中的Git文件

我使用下面的代码来删除一个包含git仓库的目录:

import errno import os import stat import shutil def clear_dir(path): shutil.rmtree(path, ignore_errors=False, onerror=handle_remove_readonly) def handle_remove_readonly(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 

这段代码应该只处理只读文件。 我可以从Windows资源pipe理器中删除目录/文件夹,但运行以下代码时:

 if __name__ == '__main__': clear_dir(r'c:\path\to\ci-monitor') 

我得到以下错误:

  File "C:\Users\m45914\code\ci-monitor\utils\filehandling.py", line 8, in clear_dir shutil.rmtree(path, ignore_errors=False, onerror=handle_remove_readonly) File "C:\Users\m45914\AppData\Local\Programs\Python\Python35\lib\shutil.py", line 488, in rmtree return _rmtree_unsafe(path, onerror) File "C:\Users\m45914\AppData\Local\Programs\Python\Python35\lib\shutil.py", line 378, in _rmtree_unsafe _rmtree_unsafe(fullname, onerror) File "C:\Users\m45914\AppData\Local\Programs\Python\Python35\lib\shutil.py", line 378, in _rmtree_unsafe _rmtree_unsafe(fullname, onerror) File "C:\Users\m45914\AppData\Local\Programs\Python\Python35\lib\shutil.py", line 378, in _rmtree_unsafe _rmtree_unsafe(fullname, onerror) File "C:\Users\m45914\AppData\Local\Programs\Python\Python35\lib\shutil.py", line 378, in _rmtree_unsafe _rmtree_unsafe(fullname, onerror) File "C:\Users\m45914\AppData\Local\Programs\Python\Python35\lib\shutil.py", line 383, in _rmtree_unsafe onerror(os.unlink, fullname, sys.exc_info()) File "C:\Users\m45914\AppData\Local\Programs\Python\Python35\lib\shutil.py", line 381, in _rmtree_unsafe os.unlink(fullname) PermissionError: [WinError 5] Access is denied: 'scratch\\repos\\ci-monitor\\.git\\objects\\pack\\pack-83e55c6964d 21e8be0afb2cbccd887eae3e32bf4.idx' 

我试过以pipe理员身份运行脚本(没有改变)。

被删除的目录是一个git回购,我定期克隆,检查和删除它。 检查是为了确保在回购中没有未合并的版本和修补程序分支。

任何人有任何想法?

如果该文件正被另一个进程使用,则不可能将其删除。 使用“解锁器”或任何其他类似软件进行交叉检查。