Python 的
shutil.copytree
不太灵活;在 copytree
中复制时添加对忽略权限的支持的最简单方法是什么(无需重新编写其实现)?
否则,
copytree
会像这样失败:
(…)”[Errno 45] Operation not supported: ‘/path/foo/bar’”
不是线程安全的(或者一般来说是可取的),但对于一次性脚本来说还可以:
导入Shutil _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 行长(如果不计算注释则为 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)
使用子进程来避免权限问题。 这对我有用:
导入子流程 命令 = f"cp -r {src_dir} {dst_dir}" subprocess.run(命令,shell=True)