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

È stato utile?

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)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top