让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”,并关闭管道的末端。 由于管道的写入端已关闭,读取端会看到文件结束。
上一篇: Getting readline to block on a FIFO
下一篇: Is there a "standard" way to implement Software Activation for .NET?