Python shutil.copy在FAT文件系统上失败(Ubuntu)

问题:在Linux中使用shutil.copy()将文件复制到FAT16挂载的文件系统失败(Python 2.7.x)。 失败是shutil内部错误和实际上失败shutil.chmod,shutil.copy似乎执行。

Shell chmod也会失败,因为在FAT中不支持权限。

问题:有没有什么干净的方法呢? 我知道我有几个select,例如:

  1. 使用复制文件 – 不理想,因为它需要完整的path,而不仅仅是目标目录,但可行
  2. 执行shell cp来复制文件
  3. 编写自己的复制function,不要尝试更改文件模式

有没有办法解决这个在Python或FAT挂载选项? 我现在通过执行mount -t vfat -o umask = 000 / dev / loop0 / mnt / foo来挂载我的程序中的文件系统

捕获exception并没有什么帮助,因为在shutil.copy和shutil.copy()内发生exception时,它在从IOException发送到调用函数之前似乎从shutil.chmod()捕获IOExceptionexception时删除目标文件。

任何想法,或者我应该从1-3select一个?

汉努

Solutions Collecting From Web of "Python shutil.copy在FAT文件系统上失败(Ubuntu)"

那么我在这种情况下作弊。

如果我知道目标是chmod失败的文件系统,我只需使用del os.chmod从os包中删除chmod方法,这样复制就成功了。

 >>> import os >>> print hasattr(os, 'chmod') True >>> foo = os.chmod >>> del os.chmod >>> print hasattr(os, 'chmod') False 

这现在允许你在chmod上执行复制而不失败。 然后我们通过分配属性重新启用它。

 >>> setattr(os, 'chmod', foo) >>> print hasattr(os, 'chmod') True 

使用shutil.copyfile ,它不需要完整的路径。

全局删除os.chmod 不是一个好主意。

 $ mkdir folder $ touch folder/a $ python2.7 -c 'import shutil; shutil.copyfile("folder/a","folder/b")' $ ls -rthla folder/ total 0 drwxr-xr-x+ Apr 17 12:49 ../ -rw-r--r-- Apr 17 12:49 a -rw-r--r-- Apr 17 12:50 b drwxr-xr-x+ Apr 17 12:50 ./ 

正如你可以在shutil( /usr/lib/python2.7/shutil.py )的python源代码中看到的,在copy源代码中没有路径考虑(相对/绝对), src变量直接作为copyfile参数。

 def copy(src, dst): """Copy data and mode bits ("cp src dst"). The destination may be a directory. """ if os.path.isdir(dst): dst = os.path.join(dst, os.path.basename(src)) copyfile(src, dst) copymode(src, dst)