在我的 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 身份运行脚本。
EDIT好吧,答案已被接受,但这并不是一个真正的答案。如果您必须以 root 身份(或者实际上以任何其他用户身份)运行脚本,您可以使用os.stat() http://docs.python.org/library/os.html#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)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)