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

有帮助吗?

解决方案

如果您可以提供帮助,请不要以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)
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top