python fileinput 修改权限

2 投票
1 回答
1538 浏览
提问于 2025-04-15 15:16

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

撰写回答