вход файла Python изменяет разрешение - PullRequest
2 голосов
/ 22 октября 2009

В моем коде Python я использую модуль fileinput для замены на месте:

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

Однако, как только это будет сделано, права на разрешение.txt теперь изменены на доступ только с правами root. Я больше не могу редактировать файл. Я могу только удалить его.

Я немного погуглил и упомянул, что это может быть вызвано тем, что fileinput создает временный файл для этого взаимодействия чтения / записи с заменой.

Тем не менее, я бы подумал, что это будет исправлено, поскольку об ошибке сообщалось в 1999 году. Что-то, что я должен сделать в своем коде, чтобы сохранить права доступа такими же? или это проблема уровня операционной системы.

Я использую Python 2.6.2 в Ubuntu 9.04

1 Ответ

2 голосов
/ 22 октября 2009

Если вы можете помочь, не запускайте скрипт как root.

EDIT Ну, ответ принят, но на самом деле это не так много. Если вы должны запустить скрипт от имени пользователя root (или даже от имени любого другого пользователя), вы можете использовать os.stat(), чтобы определить идентификатор пользователя и идентификатор группы владельца файла перед обработкой файла, а затем восстановить владение файлом после обработки.

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