Pourquoi shutil.copier() soulèvent une autorisation d'exception lors de la cp ne l'est pas?
shutil.copier() est la collecte d'une des autorisations d'erreur:
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')
Je suis en cours d'exécution copy-test.py à partir de la ligne de commande:
python copy-test.py
Mais l'exécution cp
à partir de la ligne de commande sur le même fichier à la même destination n'est pas de provoquer une erreur. Pourquoi?
- Pourriez-vous s'il vous plaît écrire de la façon dont vous lancer le script et peut-être que le code source de copy-test.py?
InformationsquelleAutor | 2012-08-06
Vous devez vous connecter pour publier un commentaire.
L'opération qui est de l'échec, est
chmod
, pas la copie elle-même:Cela indique que le fichier existe déjà et est détenue par un autre utilisateur.
shutil.copie
est spécifié à la copie de l'autorisation de bits. Si vous voulez seulement le contenu du fichier à copier, utilisershutil.copyfile(src, dst)
, oushutil.copyfile(src, os.path.join(dst, os.path.basename(src)))
sidst
est un répertoire.Une fonction qui fonctionne avec
dst
un fichier ou un répertoire et n'a pas de copie de l'autorisation de bits:shutil.copyfile
; voir ci-dessus.Cette forme a fonctionné pour moi:
C'est une supposition, mais la première chose qui saute hors de moi:
Vous n'avez pas de barre oblique. Alors que je ne suis pas sûr de la mise en œuvre de
shutil.copy()
, je peux vous dire quecp
va agir différemment selon le système d'exploitation que vous exécutez sur. Le plus probable, sur votre système,cp
est d'être intelligent et de s'apercevoir queimages
est un répertoire, et copiez le fichier en elle.Cependant, sans le slash,
shutil.copy()
peut être interpréter comme un fichier, pas la vérification, et la levée de l'exception quand il est impossible de créer un fichier nomméimages
.En bref, essayez ceci:
Arguments doivent être: