2009-10-22 7 views
2

Dans mon code python, j'utilise le module fileinput pour remplacer inplace:python fileinput change la permission

import fileinput 

for line in fileinput.FileInput("permission.txt",inplace=1): 
    line = line.strip() 
    if not 'def' in line: 
     print line 
    else: 
     line=line.replace(line,'zzz') 
     print line 


fileinput.close() 

Cependant, une fois qu'il est fait, les permissions permission.txt est changé pour un accès root uniquement. Je ne peux plus modifier le fichier. Je peux seulement le supprimer.

J'ai fait un peu de googling et j'ai mentionné que cela pouvait être dû au fait que fileinput créait un fichier temporaire pour cette interaction de lecture/écriture.

Cependant, j'aurais pensé qu'il y aurait un correctif pour cela puisque le bug a été rapporté en 1999. Est-ce quelque chose que je dois faire dans mon code pour garder les mêmes autorisations? ou est-ce un problème de niveau du système d'exploitation.

J'utilise Python 2.6.2 sur Ubuntu 9.04

Répondre

2

Si vous pouvez l'aider, ne pas exécuter votre script en tant que root.

EDIT Eh bien, la réponse a été acceptée, mais ce n'est pas vraiment une réponse. Si vous devez exécuter le script en tant que root (ou tout autre utilisateur), vous pouvez utiliser os.stat() pour déterminer l'ID utilisateur et l'ID de groupe du propriétaire du fichier avant de traiter le fichier, puis restaurer la propriété du fichier après traitement.

import fileinput 
import os 

# save original file ownership details 
stat = os.stat('permission.txt') 
uid, gid = stat[4], stat[5] 

for line in fileinput.FileInput("permission.txt",inplace=1): 
    line = line.strip() 
    if not 'def' in line: 
     print line 
    else: 
     line=line.replace(line,'zzz') 
     print line 


fileinput.close() 

# restore original file ownership 
os.chown("permission.txt", uid, gid) 
Questions connexes