我创建一个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”,然后关闭其末端。由于管道的写入端已关闭,因此读取端会看到文件结尾。