让readline在FIFO上阻塞

7
我创建了一个FIFO:
mkfifo tofetch

我运行了这段Python代码:

fetchlistfile = file("tofetch", "r")
while 1:
    nextfetch = fetchlistfile.readline()
    print nextfetch

它在readline上停顿,这是我所希望的。我运行:

echo "test" > tofetch

我的程序不再停滞了。它读取一行,然后继续无限循环。为什么没有新数据时它不会再次停滞呢?
我还尝试查看“not fetchlistfile.closed”,我不介意在每次写入后重新打开它,但Python认为fifo仍然是打开的。
1个回答

5
根据readline文档,只有当到达文件结尾时,它才会返回空字符串。关闭文件并不等同于到达文件结尾。只有在调用.close()方法时,文件对象才会被关闭。当代码到达文件结尾时,readline()将继续返回空字符串。
如果您只是将文件对象作为迭代器使用,Python将自动每次读取一行,并在到达文件结尾时停止。例如:
fetchlistfile = file("tofetch", "r")
for nextfetch in fetchlistfile:
    print nextfetch
echo "test" > tofetch 命令打开了一个命名管道,将 "test" 写入其中,并关闭了管道的写入端。由于写入端已关闭,读取端看到了文件结尾标志。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接