我用python编写了一个脚本来读取日志文件的最后5分钟,到目前为止,这是我的代码
from datetime import datetime, timedelta
now = datetime.now()
before = timedelta(minutes=5)
now = now.replace(microsecond=0)
before = (now-before)
now = (now.strftime("%b %d %X"))
before = (before.strftime("%b %d %X"))
print(before)
print(now)
with open('user.log','r') as f:
for line in f:
if before in line:
break
for line in f:
if now in line:
break
print (line.strip())
输出为Sep 03 11:47:25 Sep 03 11:52:25这是用于检查时间是否正确的打印,如果有时间,日志中有将近100行但没有带给我任何东西ifs然后打印出所有行,证明问题出在if ...
有什么想法吗?
这是我的日志文件内容的一个示例:
Sep 03 10:18:47 bni..........teagagfaesa.....
Sep 03 10:18:48 bni..........teagagfaesa.....2
答案 0 :(得分:0)
我设法找到了一个比您更老的Python。
#!/usr/bin/env python
from __future__ import with_statement
from datetime import datetime, timedelta
before = timedelta(minutes=5)
now = datetime.now().replace(microsecond=0, year=1900)
before = (now-before)
with open('user.log','r') as f:
for line in f:
if datetime.strptime(line[0:15], '%b %d %X') < before:
continue
print line.strip()
与您的代码相比,变化是我们将每个时间戳记从文件转换为datetime
对象;那么我们就可以按照您期望的方式对这些正确的机器可读表示形式进行比较(而如果不解析日期,它将无法正常工作,除非偶然-"Sep"
紧跟在"Aug"
之后,但{{ 1}}也紧跟"Sep"
之后;因此,如果您在合适的月份运行它似乎可行,但是下个月休息一下!)
"Oct"
的入侵是因为strptime()
defaults to year 1900 for inputs which don't have a year。