cp では権限例外が発生しないのに、なぜ shutil.copy() では権限例外が発生するのでしょうか? 質問する

cp では権限例外が発生しないのに、なぜ shutil.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'

コピー-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同じファイルの同じ宛先にコマンド ラインから実行してもエラーは発生しません。なぜでしょうか?

ベストアンサー1

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)

おすすめ記事