使用shutil.copyfile复制受限文件,而不是Python中的root用户

时间:2013-01-07 22:13:52

标签: python shutil

我的python脚本执行的任务之一是提取整个Linux Root FS tarball,然后将文件从中复制到目标目录中。在这样做的时候,我遇到了特殊限制文件(如gshadow)的错误,如下所示:

File "script.py", line 553, in copy_rootfs
shutil.copy(sourceFileName,targetFileName)
File "/usr/lib/python2.6/shutil.py", line 88, in copy
copyfile(src, dst)
File "/usr/lib/python2.6/shutil.py", line 52, in copyfile
fsrc = open(src, 'rb')
IOError: [Errno 13] Permission denied: '/home/myuser/temp/home/embeduser/NFS/LinuxFS/etc/gshadow'

从tarball中提取的文件gshadow的权限如下:

myuser@host temp]$ ls -l home/embeduser/NFS/LinuxFS/etc/gshadow 
---------- 1 myuser myuser 271 Nov  5 08:54 home/embeduser/NFS/LinuxFS/etc/gshadow 

有没有办法可以实现这一点而无需以root身份运行我的python脚本?

1 个答案:

答案 0 :(得分:1)

你不能用shutil来做,但是很容易想出一些自定义解决方案。诀窍是gshadow没有权限,但属于本地用户。因此,您可以使用os.chmod()更改其权限,阅读它,然后(如有必要)更改权限。