33

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

4 に答える 4

53

失敗している操作は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)))ifdstをディレクトリとして使用します。

ファイルまたはディレクトリのいずれかで機能し、dst許可ビットをコピーしない関数:

def copy(src, dst):
    if os.path.isdir(dst):
        dst = os.path.join(dst, os.path.basename(src))
    shutil.copyfile(src, dst)
于 2012-08-06T21:08:01.043 に答える
2

このフォームは私のために働いた:

shutil.copy('/src_path/filename','/dest_path/filename')
于 2019-06-13T13:01:37.833 に答える
-1

これは一種の推測ですが、私に最初に浮かぶのは:

'bin/styles/blacktie/images'

末尾にスラッシュはありません。の実装についてはよくわかりませんが、実行しているOSによって動作が異なるとshutil.copy()言えます。cpほとんどの場合、システム上でcpは、スマートであり、それがディレクトリであることに気づきimages、ファイルをそのディレクトリにコピーしています。

ただし、末尾のスラッシュがないと、チェックせずshutil.copy()にファイルとして解釈し、 。という名前のファイルを作成できない場合に例外を発生させる可能性があります。images

要するに、これを試してください:

'bin/styles/blacktie/images/'
于 2012-08-06T21:04:17.583 に答える
-2

引数は次のとおりである必要があります。

shutil.copy('src/images/ajax-loader-000000-e3e3e3.gif', 'bin/styles/blacktie/images.ajax-loader-000000-e3e3e3.gif')
于 2018-02-09T08:10:00.560 に答える