Найти - Пользователи
Полная версия: Помощь по файлам
Начало » Python для новичков » Помощь по файлам
1
Djam36
Привет всем, 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();
Djam36
Разобрался спасибо, можете подсказать если есть лучший вариант чем у меня
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 + "; "
PooH
Тут скорее вопрос привычек, я бы написал как-то так:
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)

PS: Опять же смотря что дальше делать с данными предполагается, на больших файлах я бы не стал строки собирать, а постарался бы по месту обработать/вывести
py.user.next
Это набросок, начало.
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
>>>

Пишешь сверху вниз: сначала функцию f() полностью, затем то, что для неё нужно - класс StrHandler, затем то же самое делаешь с его методами.
Djam36
Всем спасибо за советы, ответы, рекомендации, буду улучшать по мере поступления знаний!
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB