在我的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
答案 0 :(得分: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)