Python - 使用一些逻辑循环遍历日志文件

时间:2017-02-12 11:33:19

标签: python

早上好,

我参与了一个小项目,仅仅是为了学习python。 到目前为止,脚本将ssh到另一台服务器,以获取已关闭的节点列表。我想改变这一点,让它在tmp文件中存储一个down节点列表,第二天将这些节点与另一个节点进行比较,并且仅对昨天没有关闭的节点起作用。但那部分可以等待......

我目前看到的问题是在许多日志文件中搜索各种字符串,但是如果特定节点的行数超过某个数字;而不是被发送到终端..发送一条消息,而不是说#34;太多的日志条目;条目保存到/ tmp /..

这是我到目前为止所拥有的,但它并没有真正做到我想要的。

另外,如果您对我的剧本有任何其他建议,我会非常感激。我正在学习,但它正在慢慢下沉! :)

#!/usr/bin/python
#

from subprocess import *
import sys
from glob import glob
import argparse

parser = argparse.ArgumentParser()
parser.add_argument('-f', metavar='logname', help='logfile to check')
args = parser.parse_args()

ssh = Popen(["ssh", "root@srv1", 'check_nodes'],
            shell=False,
            stdout=PIPE,
            stderr=PIPE)
result = ssh.stdout.readlines()

down_nodes=[]
status_list=["down", "admindown"]

if result == []:
    error = ssh.stderr.readlines()
    print >>sys.stderr, "ERROR: %s" % error

else:
        for line in result[1:]:
            columns = line.split()
            status = columns[3]
            nodes = columns[2]
            if status in status_list:
                down_nodes.append(nodes)

if args.f:
    logs = args.f
else:
    try:
        logs = glob("/var/log/*")
    except IndexError:
        print "Something is wrong. Logs not available."
        sys.exit(1)

valid_errors = ["error", "MCE", "CATERR"]

for log in logs:
    with open("log", "r") as tmp_log:
        opn_log = tmp_log.readlines()

for line in open_log:
    for down_nodes in open_log:
        if valid_errors in open_log:
             print valid_errors

到目前为止我的测试工作有点......但它只是找到valid_errors中的错误,并且找不到同时包含down_nodevalid_errors的行在同一时间。此外,日期..也许类似于日志中包含down_nodevalid_errors并包含少于3天的日期字符串的行。

从星期五开始 - 我没有使用Python做任何事情!我只使用shell脚本,并且总是发现bash脚本非常适合我需要的东西。所以我是初学者...... :)

由于 乔恩

1 个答案:

答案 0 :(得分:0)

我已经分解了我的具体问题,如果它使它更清楚..基本上在目前,我只是想在一堆包含任何{{1}的日志文件中找到一行和任何down_nodes我的代码:

valid_errors