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)