Форум сайта python.su
0
Привет всем, python изучаю день 2-3 купил книгу по 3 питону, а на работе нужен 2.6
Вопрос таков, есть файл со строками, их от 35- до 40
SERVER HEALTH : Component:ServerRuntime,State:HEALTH_OK,MBean: выглядят вот так
Где HEALTH_OK может быть warning-critical
Задача, сделать скрипт который будет выводить статус данных нод в файл и проверять колво в ОК - Варнинг - и Критикал, посчитать кол-во я смог, а вот как выдернуть строк, например если будет Варнинг то мне нужно будет выдернуть строку с варнинг и отправить по емаил, как отправку по емаил организовать знаю, а как выдернут ьстроку из файла, с Варнинг и с Критикал не знаю скрипт пока выглядит так, сильно не ругайтесь, толкьо учу питон моогут быть проблемы со синтаксисом.
Кстати это скорее всего jython (получается) т.к используется WLST Weblogic
#!/usr/bin/python import sys connect('username','password','t3://server'); domainRuntime() cd('ServerRuntimes') servers = domainRuntimeService.getServerRuntimes(); for server in servers: sys.stdout = open('testpython.txt', 'a') print ' SERVER HEALTH :', server.getHealthState() col = 0 Search = 'OK' for Search in open('testpython.txt','r').readlines(): if Search == Search: col += 1 continue print 'Node status OK', col disconnect(); exit();
Офлайн
0
Разобрался спасибо, можете подсказать если есть лучший вариант чем у меня
CountNodeOK = 0 CountnodeWarning = 0 nodeOK = '' nodeWarning = '' CountCritical = 0 nodeCritical = '' for x in open('testpython.txt', 'r').readlines(): if x.find('OK') > 0: CountNodeOK += 1 nodeOK = nodeOK + x + "; " if x.find('Warning') > 0: CountnodeWarning += 1 nodeWarning = nodeWarning + x + "; " if x.find('Critical') > 0: CountCritical += 1 nodeCritical = nodeCritical + x + "; "
Офлайн
72
Тут скорее вопрос привычек, я бы написал как-то так:
counters = {'OK': 0, 'Warning': 0, 'Critical': 0} nodes = {x: [] for x in counters} for s in open('testpython.txt'): for key in counters: if key in s: counters[key] += 1 nodes[key].append(s)
Отредактировано PooH (Фев. 10, 2015 15:44:16)
Офлайн
857
Это набросок, начало.
def f(): sh = StrHandler() strs = sh.load_from_server( 't3://server', 'username', 'password' ) nok = sh.count(strs, 'OK') nwar = sh.count(strs, 'Warning') ncri = sh.count(strs, 'Critical') sh.print_stat('output.txt', (nok, nwar, ncri)) for i in sh.filter(strs, 'Warning'): sh.send('x@x.com', i) class StrHandler: def load_from_server(self, server, user, password): print('See 1', server, user, password) return ['a'] def count(self, seq, s): print('See 2', seq, s) return 0 def filter(self, seq, s): print('See 3', seq, s) return ['a'] def print_stat(self, fname, stat): print('See 4', fname, stat) def send(self, addr, s): print('See 5', addr, s) f()
>>> def f(): ... sh = StrHandler() ... strs = sh.load_from_server( ... 't3://server', ... 'username', ... 'password' ... ) ... nok = sh.count(strs, 'OK') ... nwar = sh.count(strs, 'Warning') ... ncri = sh.count(strs, 'Critical') ... sh.print_stat('output.txt', (nok, nwar, ncri)) ... for i in sh.filter(strs, 'Warning'): ... sh.send('x@x.com', i) ... >>> class StrHandler: ... ... def load_from_server(self, server, user, password): ... print('See 1', server, user, password) ... return ['a'] ... ... def count(self, seq, s): ... print('See 2', seq, s) ... return 0 ... ... def filter(self, seq, s): ... print('See 3', seq, s) ... return ['a'] ... ... def print_stat(self, fname, stat): ... print('See 4', fname, stat) ... ... def send(self, addr, s): ... print('See 5', addr, s) ... >>> f() See 1 t3://server username password See 2 ['a'] OK See 2 ['a'] Warning See 2 ['a'] Critical See 4 output.txt (0, 0, 0) See 3 ['a'] Warning See 5 x@x.com a >>>
Отредактировано py.user.next (Фев. 11, 2015 04:02:30)
Офлайн
0
Всем спасибо за советы, ответы, рекомендации, буду улучшать по мере поступления знаний!
Офлайн