shutil.copy () soulève une erreur de permissions:
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')
J'utilise copy-test.py à partir de la ligne de commande:
python copy-test.py
Mais exécuter cp
à partir de la ligne de commande sur le même fichier vers la même destination ne provoque pas d'erreur. Pourquoi?
L'opération qui échoue est chmod
, pas la copie elle-même:
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'
Cela indique que le fichier existe déjà et appartient à un autre utilisateur.
shutil.copy
est spécifié pour copier les bits d'autorisation. Si vous souhaitez uniquement copier le contenu du fichier, utilisez shutil.copyfile(src, dst)
ou shutil.copyfile(src, os.path.join(dst, os.path.basename(src)))
si dst
est un répertoire.
Une fonction qui fonctionne avec dst
soit un fichier, soit un répertoire et ne copie pas les bits d'autorisation:
def copy(src, dst):
if os.path.isdir(dst):
dst = os.path.join(dst, os.path.basename(src))
shutil.copyfile(src, dst)
Les arguments doivent être:
shutil.copy('src/images/ajax-loader-000000-e3e3e3.gif', 'bin/styles/blacktie/images.ajax-loader-000000-e3e3e3.gif')
C'est une sorte de conjecture, mais la première chose qui me frappe:
'bin/styles/blacktie/images'
Vous n'avez pas de slash final. Bien que je ne sois pas sûr de la mise en œuvre de shutil.copy()
, je peux vous dire que cp
agira différemment selon le système d'exploitation sur lequel vous l'exécutez. Très probablement, sur votre système, cp
est intelligent, remarquant que images
est un répertoire et y copiant le fichier.
Cependant, sans la barre oblique finale, shutil.copy()
peut l’interpréter comme un fichier, not checking et déclencher l’exception s’il est impossible de créer un fichier nommé images
.
En bref, essayez ceci:
'bin/styles/blacktie/images/'