在Windows 7 prof 64位上使用python 2.7的简单测试用例:
通过python我在目录中 checkout 一个git项目,比方说c:/temp/project
。
之后,我用python命令将其删除
shutil.rmtree('c:/temp/project')
命令后,该文件夹为空(无 stash 文件),但由于以下错误,无法将其自行删除:
WindowsError: [Error 32] The process cannot access the file because it is being used by another process: 'C:\\temp\\project'
我已经检查过了,那时git没有运行(我什至尝试了sleep(10)来确定)。
我已经尝试过以下解决方案:
What user do python scripts run as in windows?
但它不起作用,同样的错误。
尝试了
os.system('rmdir')
,但存在相同的错误。尝试过
win32api.SetFileAttributes()
函数,但存在相同的错误。如果我通过资源管理器删除该文件夹,那没有问题。
我该如何解决这个问题?
最佳答案
OP在错误的目录中运行...但是我发现使用GitPython出现此线程是有问题的;似乎很常见,因为git-python如果不采用一些奇怪的方式来清理,就会持有 repo 的句柄:
import gc, stat
gc.collect()
your_repo_obj.git.clear_cache()
# now this will succeed:
shutil.rmtree(your_repo_dir)
对这些体操的需求既是由于错误,又是设计使然。此错误描述了原因:
https://github.com/gitpython-developers/GitPython/issues/553