某些特殊原因,想一直看到.log 的最后一行打印,所以写了一些代码监控log
(有个扩展需求,就是log 因为重复启动原因,会一直创建新文件,监控的对象可能在运行时一直变,不是初始指向的log)
调用方法
python traceLog.py C:\XXXXX\RenderDoc_2023.09.16_13.27.14.log
有需要的拿去吧
- # traceLog.py
- # 相关的Renderdoc 关于glsl shader的逆向代码 ,非Python:https://blog.csdn.net/avi9111/article/details/132798279?spm=1001.2014.3001.5502
- # Notices:
- # 1. the 3rd parameter of open() is to disable file buffering
- # so file updated by another process could be picked up correctly
- # but since your focus is newly added tail, enable buffering is ok too
- # 2. It is not necessary to fh.tell() to save the position, and then seek()
- # to resume, as if readline() failed, the pointer stay still at the EOF
-
- import sys
- import time
- import os
- if sys.version_info[0] >= 3:
- unicode = str
- '''获取文件的创建时间'''
- #模型奇妙 https://www.cnpython.com/qa/153573
- def get_FileCreateTime(filePath):
- #filePath = unicode(filePath,encoding='utf8')#Python 3 renamed the unicode type to str,
- t = os.path.getctime(filePath)
- #return TimeStampToTime(t)
- return t
- #获取文件内容(info),参考:https://blog.csdn.net/HeatDeath/article/details/79526037
- def checkLatestLog(folder):
- files = os.listdir(folder)
-
- name_latest = ''
- t_latest = -1
- for i,n in enumerate(files):#这个 i 没什么用,就是写着玩
- t = get_FileCreateTime(folder+"\\" + n)#这个拼接代码应该在 win 平台,才能用
- if t>t_latest:
- t_latest = t
- name_latest = n
- return folder +"\\" + name_latest#这个代码应该在 win 平台,才能用
-
- filename = sys.argv[1]#全路径吧,(要是相对路径。。。本来可以,现在应该会有问题 ,下面套了逻辑)
- print("...open..."+filename)
- thisFilePath= filename
- #就是一个很普通的update 循环,也可以不用 with open() 套外面,不过之前代码就是这个逻辑
- with open(filename) as fh:
- #with open(filename, 'r', 0) as fh:
- #with os.fdopen(filename,'wb',0) as fh:
- while True:
- line = fh.readline()
- if not line:
- time.sleep(1)
- # 加了一个逻辑==判断当前文件夹是否有最新日志
- logFilePath = checkLatestLog(os.path.dirname(filename))
- if(logFilePath!=thisFilePath):
- fh = open(logFilePath)
- thisFilePath = logFilePath
- print(".............. 换了一个 log .............." + logFilePath)
-
- else:
- print(line)