python fileinput 修改权限
在我的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
1 个回答
2
如果可以的话,尽量不要以管理员身份运行你的脚本。
编辑 这个回答虽然被接受了,但其实并没有给出太多实质性的内容。如果你确实需要以管理员身份(或者其他任何用户身份)运行脚本,可以使用 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)