为什么只有 readline(),而不是 read() 或 readlines(),return 从长寿命 FIFO 读取时?
Why does only readline(), and not read() or readlines(), return when reading from a long-lived FIFO?
好的,我在 Ubuntu 中有一个 FIFO 文件。
with open(fifo_path) as f:
while True:
d = f.read()
print(repr(d)) ## this is never called
这行不通,我从来没有得到任何数据,即使有数据,它也会无限期地阻塞。
with open(fifo_path) as f:
while True:
d = f.readlines()
print(repr(d)) ## this is also never called
这也不行。
with open(fifo_path) as f:
while True:
d = f.readline()
print(repr(d)) ## only this is invoked
只有这个有效。我得到了数据,它会一直读取每一行。
知道为什么吗?
read()
和 readlines()
都读取了文件的 全部内容 ,并且仅在 return 完整读取该内容之后。如果您的 FIFO 的写入端永远不会关闭,则文件的内容是开放式的,因此这些调用永远不会 return.
相比之下,readline()
会阻塞,直到它只能读取 一行 ,并在该行的内容可用时立即 returns。
好的,我在 Ubuntu 中有一个 FIFO 文件。
with open(fifo_path) as f:
while True:
d = f.read()
print(repr(d)) ## this is never called
这行不通,我从来没有得到任何数据,即使有数据,它也会无限期地阻塞。
with open(fifo_path) as f:
while True:
d = f.readlines()
print(repr(d)) ## this is also never called
这也不行。
with open(fifo_path) as f:
while True:
d = f.readline()
print(repr(d)) ## only this is invoked
只有这个有效。我得到了数据,它会一直读取每一行。
知道为什么吗?
read()
和 readlines()
都读取了文件的 全部内容 ,并且仅在 return 完整读取该内容之后。如果您的 FIFO 的写入端永远不会关闭,则文件的内容是开放式的,因此这些调用永远不会 return.
readline()
会阻塞,直到它只能读取 一行 ,并在该行的内容可用时立即 returns。