gpt4 book ai didi

python - fifo - 循环读取

转载 作者:太空狗 更新时间:2023-10-29 18:30:45 25 4
gpt4 key购买 nike

我想使用 os.mkfifo用于程序之间的简单通信。我在循环读取 fifo 时遇到问题。

考虑这个玩具示例,我有一个读取器和一个使用 fifo 的写入器。我希望能够循环运行读取器以读取进入 fifo 的所有内容。

# reader.py
import os
import atexit

FIFO = 'json.fifo'

@atexit.register
def cleanup():
try:
os.unlink(FIFO)
except:
pass

def main():
os.mkfifo(FIFO)
with open(FIFO) as fifo:
# for line in fifo: # closes after single reading
# for line in fifo.readlines(): # closes after single reading
while True:
line = fifo.read() # will return empty lines (non-blocking)
print repr(line)

main()

作者:

# writer.py
import sys

FIFO = 'json.fifo'


def main():
with open(FIFO, 'a') as fifo:
fifo.write(sys.argv[1])

main()

如果我运行 python reader.py 和稍后的 python writer.py foo,将打印“foo”但 fifo 将关闭并且读取器将退出(或在 while 循环内旋转)。我希望读者保持在循环中,所以我可以多次执行作者。

编辑

我使用这个片段来处理这个问题:

def read_fifo(filename):
while True:
with open(filename) as fifo:
yield fifo.read()

但也许有一些更简洁的方法来处理它,而不是重复打开文件...

相关

最佳答案

您不需要反复重新打开文件。您可以使用 select 来阻止直到数据可用。

with open(FIFO_PATH) as fifo:
while True:
select.select([fifo],[],[fifo])
data = fifo.read()
do_work(data)

在此示例中,您不会读取 EOF。

关于python - fifo - 循环读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17449110/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com