获取readline以阻止FIFO

时间:2010-03-09 03:01:33

标签: python pipe fifo

我创建了一个fifo:

mkfifo tofetch

我运行这个python代码:

fetchlistfile = file("tofetch", "r")
while 1:
    nextfetch = fetchlistfile.readline()
    print nextfetch
正如我所希望的那样,它在readline上停滞不前。我跑:

echo "test" > tofetch

我的节目不再失速了。它读取该行,然后继续循环。当没有新数据时,为什么它不会再次失速?

我也试过看“不是fetchlistfile.closed”,我不介意在每次写入后重新打开它,但是Python认为fifo仍然是开放的。

1 个答案:

答案 0 :(得分:4)

根据readline的文档,当且仅当您处于文件结尾时,它才会返回空字符串。 Closed与文件结尾不同。只有在调用.close()时才会关闭文件对象。当您的代码到达文件末尾时,readline()会一直返回空字符串。

如果您只使用文件对象作为迭代器,Python将一次自动读取一行并在文件结束处停止。像这样:

fetchlistfile = file("tofetch", "r")
for nextfetch in fetchlistfile:
    print nextfetch

echo "test" > tofetch命令打开命名管道,向其写入“test”,并关闭它的管道末尾。因为管道的写入端是关闭的,所以读取端看到文件结尾。

相关问题