克隆临时文件夹中的git存储库时出现权限错误

vo

有问题的代码比我认为的文字能解释的更多。我已经对其进行了大规模简化,以使其易于阅读,但实际上,这就是我正在运行的内容。

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章