2

在我的 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()

但是,一旦完成,permission.txt 权限现在更改为仅限 root 访问。我无法再编辑该文件。我只能删除它。

我做了一些谷歌搜索,它提到这可能是因为 fileinput 为这个读/写替换交互创建了一个临时文件。

但是,自从 1999 年报告了该错误以来,我本以为会对此进行修复。这是我必须在代码中执行的操作以保持权限相同吗?还是操作系统级别的问题。

我在 Ubuntu 9.04 上使用 Python 2.6.2

4

1 回答 1

2

如果您能提供帮助,请不要以 root 身份运行您的脚本。

编辑 好吧,答案已被接受,但这并不是一个真正的答案。如果您必须以 root(或实际上以任何其他用户)身份运行脚本,您可以os.stat()在处理文件之前确定文件所有者的用户 ID 和组 ID,然后在处理后恢复文件所有权。

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)
于 2009-10-22T06:23:03.633 回答