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

Han*_*nnu 6 python linux mount shutil fat

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

Shell chmod也失败了,因为FAT不支持权限.

问题:这有什么好的方法吗?我知道我有几个选择,例如:

  1. 使用copyfile - 不理想,因为它需要完整路径,而不仅仅是目标目录,但可行
  2. 执行shell cp以复制文件
  3. 编写自己的复制功能,不会尝试更改文件模式

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

捕获异常没有帮助,因为异常发生在shutil.copy中,并且shutil.copy()似乎在将目标文件从shutil.chmod()捕获IOException之前删除目标文件,然后将IOException传递给调用函数.

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

汉努

Pet*_*esh 5

好吧,我在这种情况下作弊.

如果我知道目标是一个chmod失败的文件系统,我只是chmod从os包中删除该方法del os.chmod,这样就可以使副本成功.

>>> import os
>>> print hasattr(os, 'chmod')
True
>>> foo = os.chmod
>>> del os.chmod
>>> print hasattr(os, 'chmod')
False
Run Code Online (Sandbox Code Playgroud)

现在,您可以在chmod上执行复制而不会失败.然后我们通过返回属性重新启用它.

>>> setattr(os, 'chmod', foo)
>>> print hasattr(os, 'chmod')
True
Run Code Online (Sandbox Code Playgroud)