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
を実行しても、エラーは発生しません。どうして?
失敗している操作は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)
を使用するか、dst
がディレクトリの場合はshutil.copyfile(src, os.path.join(dst, os.path.basename(src)))
を使用します。
dst
ファイルまたはディレクトリのいずれかで機能し、許可ビットをコピーしない関数:
_def copy(src, dst):
if os.path.isdir(dst):
dst = os.path.join(dst, os.path.basename(src))
shutil.copyfile(src, dst)
_
このフォームは私にとってうまくいきました:
shutil.copy('/src_path/filename','/dest_path/filename')
引数は次のとおりでなければなりません:
shutil.copy('src/images/ajax-loader-000000-e3e3e3.gif', 'bin/styles/blacktie/images.ajax-loader-000000-e3e3e3.gif')
これは推測のようなものですが、最初に浮かび上がるのは次のとおりです。
_'bin/styles/blacktie/images'
_
末尾にスラッシュはありません。 shutil.copy()
の実装についてはわかりませんが、cp
は、実行しているOSによって動作が異なると言えます。ほとんどの場合、システム上でcp
は賢く、images
がディレクトリであることを認識し、ファイルをそこにコピーしています。
ただし、末尾にスラッシュがない場合、shutil.copy()
はそれをファイルとして解釈し、notチェックし、images
という名前のファイルを作成できない場合に例外を発生させます。 。
要するに、これを試してください:
_'bin/styles/blacktie/images/'
_