为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PIPIONE 2022-07-14 18:11:44
#!/usr/bin/pythonimport commandsimport sysfrom optparse import OptionParserimport redef get_hadoop_status():file = open("/usr/local/nagios/test.txt", 'r')dead_num = 0line = file.readline()while ('' != line):string = linevalue = re.findall( '.?datanode\d+\s+(\d).+', string)if (value == 1):dead_num += 1else:passfile.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_statussys.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_statussys.exit(1)else:print 'OK - DeadNode number is %d' %(dead_num)sys.exit(0)我是想匹配底下的这种格式文件每行的最后一位,为0时代表正常,为1时代表宕机:datanode1 1datanode2 0datanode3 0datanode4 0datanode5 1datanode6 1datanode7 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_statusvalue = re.findall( '.?datanode\d+\s+(\d).+', string)File "/usr/lib64/python2.4/sre.py", line 167, in findallreturn _compile(pattern, flags).findall(string)
查看完整描述

2 回答

?
一只萌萌小番薯

TA贡献1795条经验 获得超7个赞

我一般都是用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 re
text ="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匹配整个字符串,直到找到一个匹配。


查看完整回答
反对 回复 2022-07-18
?
德玛西亚99

TA贡献1770条经验 获得超3个赞

光从你这个栈追踪上看不出什么问题

你可以试试换成re.search(r'datanode.*(\d).+', a).group(1)

查看完整回答
反对 回复 2022-07-18
  • 2 回答
  • 0 关注
  • 132 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信