执行后总是显示底下的错误:请教要怎么解决?

#!/usr/bin/python
import commands
import sys
from optparse import OptionParser
import re

def get_hadoop_status():
file = open("/usr/local/nagios/test.txt", 'r')
dead_num = 0
line = file.readline()
while ('' != line):
string = line
value = re.findall( '.?datanode\d+\s+(\d).+', string)
if (value == 1):
dead_num += 1
else:
pass
file.close()

if __name__ == '__main__':
parser = OptionParser(usage="%prog [-w] [-c]", version="%prog 1.0")
parser.add_option("-w", "--warning", type="int", dest="w", default=1)
parser.add_option("-c", "--critical", type="int", dest="c", default=3)
(options, args) = parser.parse_args()

if(options.c <= options.w):
print '-c must greater than -w'
sys.exit(1)

get_hadoop_status()

if(dead_num >= options.c) :
print 'CRITICAL - DeadNode number is %d:\n' %(dead_num)
# while (count<dead_num):
# print 'datanode%d\n' %(datanode_num(count))
# count += 1
# print dead_datanode_status
sys.exit(2)
elif(dead_num >= options.w):
print 'WARNING - DeadNode number is %d:\n' %(dead_num)
# while (count<dead_num):
# print 'datanode%d\n' %(datanode_num(count))
# count += 1
# print dead_datanode_status
sys.exit(1)
else:
print 'OK - DeadNode number is %d' %(dead_num)
sys.exit(0)

我是想匹配底下的这种格式文件每行的最后一位,为0时代表正常,为1时代表宕机:
datanode1 1
datanode2 0
datanode3 0
datanode4 0
datanode5 1
datanode6 1
datanode7 1
执行后总是显示底下的错误:
Traceback (most recent call last):
File "./check_datanode_alive", line 30, in ?
get_hadoop_status()
File "./check_datanode_alive", line 13, in get_hadoop_status
value = re.findall( '.?datanode\d+\s+(\d).+', string)
File "/usr/lib64/python2.4/sre.py", line 167, in findall
return _compile(pattern, flags).findall(string)

PIPIONE
浏览 133回答 2
2回答

一只萌萌小番薯

我一般都是用math或者seach的,你可以试试。re.match  re.match 尝试从字符串的开始匹配一个模式,如:下面的例子匹配第一个单词。import retext ="JGood is a handsome boy, he is cool, clever, and so on..."m = re.match(r"(\w+)\s", text)if m:print m.group(0), '\n', m.group(1)else:print'not match're.match的函数原型为:re.match(pattern, string, flags)第一个参数是正则表达式,这里为"(\w+)\s",如果匹配成功,则返回一个Match,否则返回一个None;第二个参数表示要匹配的字符串;第三个参数是标致位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。re.search  re.search函数会在字符串内查找模式匹配,只到找到第一个匹配然后返回,如果字符串没有匹配,则返回None。import retext ="JGood is a handsome boy, he is cool, clever, and so on..."m = re.search(r'\shan(ds)ome\s', text)if m:print m.group(0), m.group(1)else:print'not search're.search的函数原型为: re.search(pattern, string, flags)每个参数的含意与re.match一样。 re.match与re.search的区别:re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;而re.search匹配整个字符串,直到找到一个匹配。

德玛西亚99

光从你这个栈追踪上看不出什么问题你可以试试换成re.search(r'datanode.*(\d).+', a).group(1)
打开App,查看更多内容
随时随地看视频慕课网APP