2

我在使用fileinputpython 模块时遇到了一些奇怪的行为。如果我尝试更改的文件没有用户读取权限,它将被删除。

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。我已经在bash,csh和中复制了这个ksh

4

2 回答 2

1

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

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

就地文档: http ://docs.python.org/2/library/fileinput.html#fileinput.FileInput

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

于 2013-02-25T05:25:18.697 回答
0

看起来像一个错误fileinput建议你在Python Bug Tracker上打开一个关于它的问题

于 2013-02-25T05:22:55.590 回答