【发布时间】:2009-08-20 00:51:17
【问题描述】:
Python 的shutil.copytree 不是很灵活;在复制copytree 时添加对忽略权限的支持的最简单方法是什么(无需重新编写其实现)?
否则,copytree 会像这样失败:
(…)”[Errno 45] Operation not supported: ‘/path/foo/bar’”
【问题讨论】:
Python 的shutil.copytree 不是很灵活;在复制copytree 时添加对忽略权限的支持的最简单方法是什么(无需重新编写其实现)?
否则,copytree 会像这样失败:
(…)”[Errno 45] Operation not supported: ‘/path/foo/bar’”
【问题讨论】:
不是线程安全的(或一般建议),但对于一次性脚本来说是可以的:
进口舒蒂尔 _orig_copystat = shutil.copystat shutil.copystat = lambda x, y: x shutil.copytree(src, dst) shutil.copystat = _orig_copystat【讨论】:
您的标准 Python 发行版中有 shutil.py(例如,在 Ubuntu 上,我的位于 /usr/lib/python2.6 下;Windows 可能是 C:\Python26\lib?)。 copytree 函数只有 38 行长(如果不计算 cmets,则为 34 行),并且文档字符串的末尾明确指出:
XXX Consider this example code rather than the ultimate tool.
所以说实话,最简单的方法实际上是更改/添加几行到 copytree,或者找到另一个库。
【讨论】:
在 Python 3.2 及更高版本中,现在有一种内置方法可以执行此操作。 shutil.copytree 接受自定义文件复制函数作为参数。您可以使用它将默认文件复制功能(shutil.copy2)更改为不复制权限的功能,例如shutil.copy:
shutil.copytree(src, dst, copy_function=shutil.copy)
【讨论】: