问题:
程序从文件末尾开始从无限流中读取行。
#Solution:
import time
def tail(theFile):
theFile.seek(0,2) # Go to the end of the file
while True:
line = theFile.readline()
if not line:
time.sleep(10) # Sleep briefly for 10sec
continue
yield line
if __name__ == '__main__':
fd = open('./file', 'r+')
for line in tail(fd):
print(line)
readline()
是非阻塞读取,if检查每一行。
问题:
在写入文件的进程有close()
1)为了避免使用if
,
2)生成器函数可以返回file
关闭吗?
答案 0 :(得分:3)
我相信这是可能的 - 您可以使用theFile
的{{1}}属性,并在文件关闭时引发closed
异常。像这样:
StopIteration
当文件关闭并引发异常时,您的循环将停止。
更简洁的方法(谢谢,Christian Dean)不涉及显式异常,是测试循环标题中的文件指针。
def tail(theFile):
theFile.seek(0, 2)
while True:
if theFile.closed:
raise StopIteration
line = theFile.readline()
...
yield line