2010-05-13 60 views
0

我在我的代码中使用这个函数来返回我想从读取日志文件中得到的字符串,我想grep“exim”过程并返回结果,但运行代码时没有提供任何错误,但产量只有三行,我如何才能获得只涉及到进出口过程中的输出..python logparse搜索特定文本

#output: 
    {'date': '13', 'process': 'syslogd', 'time': '06:27:33', 'month': 'May'} 
    {'date': '13', 'process': 'exim[23168]:', 'time': '06:27:33', 'month': 'May'} 
    {'May': ['syslogd']} 


#function:  
def generate_log_report(logfile): 
    report_dict = {} 
    for line in logfile: 
     line_dict = dictify_logline(line) 
     print line_dict 
     try: 
      month = line_dict['month'] 
      date = line_dict['date'] 
      time = line_dict['time'] 
      #process = line_dict['process'] 
      if "exim" in line_dict['process']: 
       process = line_dict['process'] 
       break 
      else: 
       process = line_dict['process']  
     except ValueError: 
      continue 
     report_dict.setdefault(month, []).append(process) 
    return report_dict 

回答

0

我改变了这个代码,但它只给我一行作为输出?遗漏...

#!/usr/bin/env python 

import sys 

def generate_log_report(logfile): 
     for line in logfile: 
       line_split = line.split() 
       list = [line_split[0], line_split[1], line_split[2], line_split[4]] 
       if "exim" in list[3]: 
         l = [line_split[0], line_split[1], line_split[2], line_split[4]] 
       else: 
         li = [line_split[0], line_split[1], line_split[2], line_split[4]] 
     return l 


if __name__ == "__main__": 
     if not len(sys.argv) > 1: 
       print __doc__ 
       sys.exit(1) 
     infile_name = sys.argv[1] 
     try: 
       infile = open(infile_name, "r") 
     except IOError: 
       print "you must specify a valid file" 
       print __doc__ 
       sys.exit(1) 
     log_report = generate_log_report(infile) 
     print log_report 
     infile.close() 
+0

我加入 “打印L” else子句前和工作!但我不明白为什么“RETURN L”没有工作... – krisdigitx 2010-05-14 10:33:46

0

这是因为你有里面的break语句如果检查“进出口”。只要你找到“exim”的一行,你就会完全停止处理,这听起来就像你想要的相反!

我想你想删除中断并把你的打印输出到if中。如果您的问题是关于函数的返回值,那么您需要做出更重要的更改,可能完全删除report_dict并简单地创建一个在其进程字段中具有exim的列表。