【发布时间】:2021-10-16 22:16:19
【问题描述】:
我必须从实时存在的日志文件中读取数据。我使用了Reading multiple files in real time? 中提到的代码,但是我只能读取第一个文件,即 system.log。如何迭代读取所有文件,即首先 system.log 然后 wifi.log 并再次重复相同的过程。
import time
import glob
import threading
def follow(thefile):
thefile.seek(0,2)
while True:
line = thefile.readline()
if not line:
time.sleep(0.1)
continue
yield line
lock = threading.Lock()
def printFile(logfile):
loglines = follow(logfile)
for line in loglines:
lock.acquire()
print (line)
lock.release()
if __name__ == '__main__':
files=['system.log','wifi.log']
for log in files:
logfile = open(log, "r")
t = threading.Thread(target = printFile,args = (logfile,))
t.start()
【问题讨论】:
-
如果你在 unix 上,你可以使用系统调用很容易地实现这一点。这是一个例子:stackoverflow.com/questions/12523044/…
-
@mama 我必须将此代码用于 linux 系统
-
linux 是 unix:所以你可以使用我第一条评论中的链接。
-
我可以为单个文件做到这一点。我必须对多个文件执行相同的操作。
-
正如您在问题中看到的,其中一种方法是
Non-Blocking,因此您可以使用它同时跟踪多个文件。一会儿我可以给你举个例子。
标签: python multithreading file-io