python fileinput更改权限
-
05-07-2019 - |
题
在我的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)
不隶属于 StackOverflow