2010-09-23 3 views
1

En python je fais une commande os.system('chmod o+w filename.png') afin que je puisse écraser le fichier avec pngcrush.Mes autorisations sont-elles définies correctement? (python)

Ce sont les autorisations après que je les ai mis en python:

-rw-rw-rw- 1 me users 925 Sep 20 11:25 filename.png 

Alors je tente:

os.system('pngcrush filename.png filename.png') 

qui est censé remplacer le fichier, mais je reçois:

Cannot overwrite input file filename.png 

Quel pourrait être le problème? Le code pngcrush n'est-il pas exécuté en tant qu'utilisateur «autre» pour lequel les autorisations d'écriture sont activées?

Merci!

Répondre

3

Le problème est avec la façon dont vous exécutez le programme pngcrush, pas avec les autorisations de filename.png ou Python. Il tente simplement d'ouvrir filename.png à la fois pour l'entrée et la sortie, ce qui est bien sûr invalide.

Donnez pngcrush soit l'option -e soit l'option -d pour lui indiquer comment écrire une sortie. Lisez son man pour plus d'informations.

2

Peut-être que pngcrush ne vous permet pas d'utiliser le même nom pour les fichiers d'entrée et de sortie? Avez-vous essayé de changer le nom de fichier de sortie? Si oui, quels étaient les résultats?

0

Peut-être que vous êtes supposé donner un nom de fichier différent (inexistant) pour la sortie. Avez-vous essayé la même chose dans un shell?

2

En aparté (non lié au problème des fichiers d'entrée et de sortie étant le même), vous pouvez changer le mode d'un fichier en utilisant os.chmod, qui est plus efficace que l'exécution chmod:

import os 
import stat 

path = "filename.png" 
mode = os.stat(path).st_mode  # get current mode 
newmode = mode | stat.S_IWOTH # set the 'others can write' bit 
os.chmod(path, newmode)   # set new mode 
+0

Très cool merci! – ash

Questions connexes