代码之家  ›  专栏  ›  技术社区  ›  mik

python fileinput更改权限

  •  2
  • mik  · 技术社区  · 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权限现在更改为仅根目录访问。我不能再编辑文件了。我只能删除它。

    我做了一些谷歌搜索,它提到这可能是因为fileinput为这个读/写替换交互创建了一个临时文件。

    不过,我本以为自1999年报告这个bug以来,会有一个修复方法。我必须在代码中做些什么来保持权限不变吗?或者是操作系统级别的问题。

    我在Ubuntu9.04上使用的是python 2.6.2

    1 回复  |  直到 16 年前
        1
  •  2
  •   mhawke    16 年前

    如果你能帮助它,不要以根用户身份运行你的脚本。

    编辑 好吧,答案已经被接受了,但实际上并不是什么答案。如果您必须以根用户(或任何其他用户)的身份运行脚本,则可以使用 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)