shutil.copy()正在引发权限错误:
Traceback (most recent call last):
File "copy-test.py", line 3, in <module>
shutil.copy('src/images/ajax-loader-000000-e3e3e3.gif', 'bin/styles/blacktie/images')
File "/usr/lib/python2.7/shutil.py", line 118, in copy
copymode(src, dst)
File "/usr/lib/python2.7/shutil.py", line 91, in copymode
os.chmod(dst, mode)
OSError: [Errno 1] Operation not permitted: 'bin/styles/blacktie/images/ajax-loader-000000-e3e3e3.gif'
copy-test.py:
import shutil
shutil.copy('src/images/ajax-loader-000000-e3e3e3.gif', 'bin/styles/blacktie/images')
我从命令行运行copy-test.py:
python copy-test.py
但是从同一文件的命令行运行cp
到同一目标不会导致错误。为什么呢?
答案 0 :(得分:38)
失败的操作是chmod
,而不是副本本身:
File "/usr/lib/python2.7/shutil.py", line 91, in copymode
os.chmod(dst, mode)
OSError: [Errno 1] Operation not permitted: 'bin/styles/blacktie/images/ajax-loader-000000-e3e3e3.gif'
这表示该文件已存在并由另一个用户拥有。
指定 shutil.copy
来复制权限位。如果您只想复制文件内容,请使用shutil.copyfile(src, dst)
或shutil.copyfile(src, os.path.join(dst, os.path.basename(src)))
如果dst
是目录。
与dst
一个文件或目录一起使用但不复制权限位的函数:
def copy(src, dst):
if os.path.isdir(dst):
dst = os.path.join(dst, os.path.basename(src))
shutil.copyfile(src, dst)
答案 1 :(得分:0)
这是一种猜测,但是第一件事突然出现在我身上:
'bin/styles/blacktie/images'
您没有尾随斜杠。虽然我不确定shutil.copy()
的实现,但我可以告诉您,cp
的行为会有所不同,具体取决于您运行的操作系统。最有可能的是,在您的系统上,cp
非常聪明,并注意到images
是一个目录,并将文件复制到其中。
但是,如果没有尾部斜杠,shutil.copy()
可能会将其解释为文件,不检查,并在无法创建名为images
的文件时引发异常
简而言之,试试这个:
'bin/styles/blacktie/images/'
答案 2 :(得分:0)
参数必须是:
shutil.copy('src/images/ajax-loader-000000-e3e3e3.gif', 'bin/styles/blacktie/images.ajax-loader-000000-e3e3e3.gif')
答案 3 :(得分:0)
此表格对我有用:
shutil.copy('/src_path/filename','/dest_path/filename')