Issue 36850: shutil.copy2 fails with even with source network filesystem not supporting extended attributes (original) (raw)
This is a near duplicate of #24564, but has a slightly smaller scope.
We're using a CIFS filesystem and noticed that copying files from that filesystem to a local path with shutil.copy2
does not work, but fails with an OSError: [Errno 22] Invalid argument
. This is because copy2()
calls copystat()
which contains
try:
names = os.listxattr(src, follow_symlinks=follow_symlinks)
except OSError as e:
if e.errno not in (errno.ENOTSUP, errno.ENODATA):
raise
In our case with our CIFS mount, and in the NFS mounts mentioned in #24564, os.listxattr()
raises an IOError with errno.EINVAL
(22). It was proposed in #24564 already to also ignore EINVAL, but with this issue I wanted to specifically propose to do so for the reading part. While I also think that copy2() should work with both source and target filesystems not supporting xattr, our use case where the likelihood of data loss is zero (because there have never been xattr in the first place) is particularly annoying.