让readline在FIFO上阻塞

我创建了一个fifo:

mkfifo tofetch

我运行这个python代码:

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

正如我所希望的那样,它在readline上停滞不前。 我运行:

echo "test" > tofetch

而且我的程序不再停滞。 它读取该行,然后继续循环。 当没有新数据时,为什么它不会再次失速?

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


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

如果您只是将文件对象用作迭代器,则Python将一次自动读取一行并在文件结束时停止。 喜欢这个:

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

echo "test" > tofetch命令打开命名管道, echo "test" > tofetch写入“test”,并关闭管道的末端。 由于管道的写入端已关闭,读取端会看到文件结束。

链接地址: http://www.djcxy.com/p/45139.html

上一篇: Getting readline to block on a FIFO

下一篇: Is there a "standard" way to implement Software Activation for .NET?