我使用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
的权限位组合也会出现同样的情况。我已在bash
,csh
和ksh
中重现了这一点。
答案 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