gpt4 book ai didi

python - 从正在 Python 中写入的打开文件句柄中读取

转载 作者:行者123 更新时间:2023-11-30 23:53:48 24 4
gpt4 key购买 nike

我知道这是流处理中的一个经典问题,但我不知道如何在Python中处理它。我有一个正在由事件进程写入的文件句柄。我想逐行使用该文件句柄中的内容,但我不想在等待读取时陷入死锁。我将继续阅读,直到 EOF 或循环阅读 60 秒,以先到者为准。有关如何执行此操作的建议将不胜感激。我对这个问题的伪代码描述如下。

proc = genprocess("command")
found_a = False
found_b = False
start = time.time()
while True:
line = proc.readline()
while line:
if not found_a and grep(pattern_a, line):
found_a = True
print "Found A, now looking for B"
elif not found_b and grep(pattern_b, line):
found_b = True
print "Found B, all done"
break
if time.time() - start > 60:
break
else:
time.sleep(5)

proc.kill()

问题是这在每个时间间隔上只读取一行。相反,我希望循环内部尽可能多次地迭代,但阻止等待新内容写入文件。一旦它读取了尽可能多的可用内容,它应该休眠 5 秒钟,以便积累更多内容。

最佳答案

如果您在 Unix 环境中运行,则可以使用 Python 的 select module等待文件句柄上的数据。另外,您可以使用Python的fcntl module将文件句柄更改为非阻塞模式,如 this question 中所述.

例如,假设您的 proc 变量是支持 fileno() 的常规文件句柄:

file_num = proc.fileno()
old_flags = fcntl.fcntl(file_num, fcntl.F_GETFL)
fcntl.fcntl(file_num, fcntl.F_SETFL, old_flags | os.O_NONBLOCK)

关于python - 从正在 Python 中写入的打开文件句柄中读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5467170/

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