我创建一个fifo:

mkfifo tofetch

我运行以下python代码:
fetchlistfile = file("tofetch", "r")
while 1:
    nextfetch = fetchlistfile.readline()
    print nextfetch

正如我希望的那样,它停在readline上。我跑:
echo "test" > tofetch

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

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

最佳答案

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

如果仅将文件对象用作迭代器,Python将一次自动读取一行并在文件末尾停止。像这样:

fetchlistfile = file("tofetch", "r")
for nextfetch in fetchlistfile:
    print nextfetch
echo "test" > tofetch命令打开命名管道,向其写入“test”,然后关闭其末端。由于管道的写入端已关闭,因此读取端会看到文件结尾。

08-24 22:32