让 readline 在 FIFO 上阻塞

2024-01-17

我创建一个 fifo:

mkfifo tofetch

我运行这个Python代码:

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

正如我所希望的那样,它停在读取线上。我跑:

echo "test" > tofetch

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

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


根据文档readline http://docs.python.org/library/stdtypes.html#file.readline,当且仅当您位于文件末尾时,它才返回空字符串。关闭与文件结束不同。仅当调用 .close() 时,文件对象才会关闭。当代码到达文件末尾时,readline() 不断返回空字符串。

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

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

The echo "test" > tofetch命令打开命名管道,向其中写入“test”,然后关闭管道的末端。因为管道的写入端是关闭的,所以读取端看到的是文件结尾。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

让 readline 在 FIFO 上阻塞 的相关文章

随机推荐