python fileinput modifica l'autorizzazione
-
05-07-2019 - |
Domanda
Nel mio codice Python, utilizzo il modulo fileinput per la sostituzione sul posto:
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()
Tuttavia, una volta fatto, i permessi permesso.txt ora sono cambiati in accesso solo root. Non riesco più a modificare il file. Posso solo cancellarlo.
Ho fatto un po 'di ricerche su Google e ha detto che ciò potrebbe essere causato dal fatto che fileinput crea un file temporaneo per questa interazione di sostituzione lettura / scrittura.
Tuttavia, avrei pensato che ci sarebbe stata una correzione da quando il bug è stato segnalato nel 1999. È qualcosa che devo fare nel mio codice per mantenere le autorizzazioni uguali? o è un problema a livello di sistema operativo.
Sto usando Python 2.6.2 su Ubuntu 9.04
Soluzione
Se puoi aiutarlo, non eseguire lo script come root.
Modifica
Bene, la risposta è stata accettata, ma non è proprio una risposta. Nel caso in cui sia necessario eseguire lo script come root (o effettivamente come qualsiasi altro utente), è possibile utilizzare os.stat ()
per determinare l'id utente e l'id gruppo del proprietario del file prima di elaborare il file, quindi ripristinare la proprietà del file dopo l'elaborazione.
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)