Pergunta

No meu código python, eu uso o módulo FileInput para inplace substituição:

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()

No entanto, uma vez que é feito, permissões permission.txt está alterado raiz único acesso. Eu não pode mais editar o arquivo. Só posso excluí-lo.

Eu fiz algum googling e ele mencionou que este poderia ser causado porque FileInput cria um arquivo temporário para esta leitura / gravação substituir interação.

No entanto, eu teria pensado que haveria uma correção para esse desde que o bug foi relatado em 1999. É algo que eu tenho que fazer no meu código para manter as permissões do mesmo? ou é uma questão de nível de sistema operacional.

Eu estou usando Python 2.6.2 no Ubuntu 9.04

Foi útil?

Solução

Se você pode ajudá-la, não executar o script como root.

Editar Bem, a resposta foi aceite, mas não é realmente muito de uma resposta. No caso de você deve executar o script como root (ou mesmo como qualquer outro usuário), você pode usar os.stat() para determinar o ID de usuário e ID de grupo de proprietário do arquivo antes de processar o arquivo e, em seguida, restaurar a propriedade do arquivo após o processamento.

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)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top