-当使用 python 2.7 shutil 以 root 身份从 linux 将文件写入 cifs 共享时,没问题
-以普通用户身份使用 cp 手动写入文件时,没有问题
-以普通用户身份使用 python shutil.copy 或 copy2 时:
File "/usr/lib64/python2.7/shutil.py", line 120, in copy
copymode(src, dst)
File "/usr/lib64/python2.7/shutil.py", line 91, in copymode
os.chmod(dst, mode)
OSError: [Errno 1] Operation not permitted: '/mnt/RW_H-drive/file.csv
最佳答案
我在上面的评论中对 Debian 和 CentOS 的看法是错误的,Debian 系统驱动器死机了,我在一个企业机器上运行我的工作,其中唯一的可能性是 CentOS 或 SUSE,所以我无法比较/etc/fstab 文件.我试图使用没有 uid=xxxx 的 dir_mode=0777,file_mode=0777 挂载共享。我不明白为什么,但是当您指定 dir_mode 和 file_mode 时,您会获得您期望的权限并且可以手动将文件写入共享但使用 shutil 失败并出现上述错误。如果您删除 dir_mode 和 file_mode 并使用用户 uid=xxxx,其中 xxxx 是任何本地可识别用户(本地、LDAP 或 NIS)的用户 ID,那么权限将按预期手动工作(cp 或 touch 命令等),也可以通过 python 和 shutil。当我第一次设置 fstab 文件时,我可能遇到了与 Debian 相同的问题,这就是为什么我有一个小铃铛告诉我尝试 uid,没有别的。奇怪的是,据我所知,fstab 中用户的 UID 和 cifs 用户是无关的,它们甚至不必具有相同的名称。当您以 root 用户身份更改共享上的文件时,两条挂载线也都有效。
例子:
//nasx/sharex/ /mnt/RW_H-drive/ cifs credentials=/root/smbcredentials,_netdev,uid=4321 0 0
而不是:
//nasx/sharex/ /mnt/RW_H-drive/ cifs credentials=/root/smbcredentials,_netdev,file_mode=0777,dir_mode=0777 0 0
关于python - cifs 共享上的 shutil.copy2 只能作为 root 使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35677133/