有问题的代码比我认为的文字能解释的更多。我已经对其进行了大规模简化,以使其易于阅读,但实际上,这就是我正在运行的内容。
def main():
with tempfile.TemporaryDirectory() as td:
for repo in repos:
subprocess.run("git clone --mirror {} {}".format(os.path.join(td, repo.path), repo.url)
克隆部分工作正常,并成功浏览了整个列表。并不是说,当“ with ... as ...”退出时,它会引发以下错误(追溯从上下文管理器的__exit__开始):
os.unlink(fullname)
PermissionError: [WinError 5] Access is denied: 'C:\\Users\\USERNAME\\AppData\\Local\\Temp\\tmp4ew2qffb\\sources\\REPONAME\\objects\\pack\\pack-abd0ff87083dbbcb90f707d8f2d53c730583bb6e.idx'
以管理员身份运行脚本也无济于事。这是怎么了?
编辑:我已经研究了它,结果发现python 3.7的TemporaryDirectory清理不支持清理Windows上的只读文件。
通常在使用结束时添加with tempfile...
,所以在离开上下文之前,例如
for fname in pathlib.Path(td).glob('**/*.*'): # make all writable for deletion
fname.chmod(stat.S_IWRITE)
应该有所帮助。
注意,偶尔我仍然会看到PermissionError(“仍在使用中”),不确定在我的环境中这是否很特别。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句