我创建了一个fifo:
mkfifo tofetch
我运行这个python代码:
fetchlistfile = file("tofetch", "r")
while 1:
nextfetch = fetchlistfile.readline()
print nextfetch
正如我所希望的那样,它在readline上停滞不前。我跑:
echo "test" > tofetch
我的节目不再失速了。它读取该行,然后继续循环。当没有新数据时,为什么它不会再次失速?
我也试过看“不是fetchlistfile.closed”,我不介意在每次写入后重新打开它,但是Python认为fifo仍然是开放的。
答案 0 :(得分:4)
根据readline的文档,当且仅当您处于文件结尾时,它才会返回空字符串。 Closed与文件结尾不同。只有在调用.close()时才会关闭文件对象。当您的代码到达文件末尾时,readline()会一直返回空字符串。
如果您只使用文件对象作为迭代器,Python将一次自动读取一行并在文件结束处停止。像这样:
fetchlistfile = file("tofetch", "r")
for nextfetch in fetchlistfile:
print nextfetch
echo "test" > tofetch
命令打开命名管道,向其写入“test”,并关闭它的管道末尾。因为管道的写入端是关闭的,所以读取端看到文件结尾。