fileinput.py删除目标文件

时间:2013-02-25 05:05:32

标签: python unix file-io

我使用fileinput python模块获得了一些奇怪的行为。如果我尝试更改的文件没有用户读取权限,则会被删除。

import fileinput

try:
    for line in fileinput.input('TEST', inplace=1):
        line = line.strip()
        if '/' in line:
            print "PATH: " + line
        else:
            print line
except Exception as e:
    print e

如果我运行此文件,我会得到:

$ ls -l
--wxrwxrwx 1 myusername agqt3 0 Feb 25 11:02 TEST
$ python test.py
[Errno 13] Permission denied: 'TEST.bak'
$ ls -l
total 0

文件被删除。每个其他不包含用户r的权限位组合也会出现同样的情况。我已在bashcshksh中重现了这一点。

2 个答案:

答案 0 :(得分:1)

您似乎正在使用inplace=1,所以是的,该文件预计会被覆盖。 完成此操作后,将创建.bak文件,并覆盖初始文件名。

但是,有权读取初始文件(但可以写),因此创建备份时它是空的(或失败),并且原来被覆盖了。

来自 inplace 文档: http://docs.python.org/2/library/fileinput.html#fileinput.FileInput

  

可选的就地过滤:如果关键字参数 inplace = 1 是   传递给fileinput.input()或FileInput构造函数,该文件   被移动到备份文件,标准输出被定向到输入   文件(如果已存在与备份文件同名的文件,则为   将被默默地替换)。这使得编写过滤器成为可能   在适当的位置重写其输入文件。如果备份参数是   给定(通常为backup ='。'),它指定   备份文件的扩展名,备份文件仍然存在;通过   默认情况下,扩展名为“.bak”,并在输出时删除   文件已关闭。标准输入时禁用就地过滤   读取。

答案 1 :(得分:0)

看起来像fileinput中的错误。建议您在Python Bug Tracker

上打开相关问题