当cp没有时,为什么shutil.copy()会引发权限异常?

时间:2012-08-06 20:58:54

标签: python permissions copy

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到同一目标不会导致错误。为什么呢?

4 个答案:

答案 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')