我的任务是从10个文本文件中收集日志,这些文本文件是,a,a.0,a.1……a.9.这些日志需要从指定的日期和时间收集,该日期和时间作为参数传递。最大的问题是我知道如何在那之后找到日期和日志,但我如何同时对10个文本文件重复相同的操作。收集的日志将再次保存在文本文件中。
到目前为止,我已经尝试过了:
month_abbr = {"jan": 1, "feb": 2, "mar": 3, "apr": 4, "may": 5, "jun": 6,
"jul": 7, "aug": 8, "sep": 9, "oct": 10, "nov": 11, "dec": 12}
min_val = "Aug 14 15:35:54"
print min_val
def parse_date(lines):
mon, day, tim = lines.split(None, 3)[:-1]
date_string = "{:02} {:02} ".format(month_abbr[mon.lower()], int(day)) + tim
try:
return datetime.strptime(date_string, "%m %d %H:%M:%S.%f")
except ValueError as e:
return datetime.strptime(date_string, "%m %d %H:%M:%S")
def threshold(min_val):
mon, day, tim = min_val.split(None, 3)
date_string = "{:02} {:02} ".format(month_abbr[mon.lower()], int(day)) + tim
try:
return datetime.strptime(date_string, "%m %d %H:%M:%S.%f")
except ValueError as e:
return datetime.strptime(date_string, "%m %d %H:%M:%S")
command = ' grep -i error /var/log/a | grep -i a0 '
sub_proc1 = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, preexec_fn=lambda: signal(SIGPIPE, SIG_DFL))
result = sub_proc1.communicate()[0]
timestamp = open("temp.txt", "w+")
timestamp.write(result)
timestamp.close()
f = open("temp.txt")
for lines in f:
date_string = " ".join(lines.split(None, 3)[:-1])
#print(date_string)
date_object = parse_date(lines)
#print(date_object)
if parse_date(lines) >= threshold(min_val):
print(lines)
请注意:只能使用标准Python库!
发布于 2018-08-15 09:23:17
所以,这是我的解决方案:
import sys
import os
from datetime import datetime
MONTHS = {month: i for i, month in enumerate(['jan', 'feb', 'mar', 'apr', 'may', 'jun',
'jul', 'aug', 'sep', 'oct', 'nov', 'dec'])}
LOG_DIR = '/var/log'
def parse_date(s):
try:
month, rest = s.split(None, 1)
except ValueError:
return None
date = MONTHS[month.lower()] + ' {rest}'
try:
return datetime.strptime(date, "%m %d %H:%M:%S.%f")
except ValueError:
pass
try:
return datetime.strptime(date, "%m %d %H:%M:%S")
except ValueError:
pass
return None
if len(sys.argv) != 4:
print('Usage: <start> <end>', file=sys.stderr)
exit(1)
start, end = sys.argv[1:]
for filename in os.listdir(os.path.join(LOG_DIR)):
name, *_ = filename.rsplit('.')
date = parse_date(name)
if date and parse_date(start) <= date <= parse_date(end):
with open(os.path.join(LOG_DIR, filename)) as f, open(output, 'a') as out:
for line in f:
print(line)
https://stackoverflow.com/questions/51851301
复制相似问题