- Проблема в написании регулярного выражения на python, mrrrr, 21:56 , 04-Ноя-13 (1)
Задача использовать именно модуль re? Если это не самоцель, то можно было бы распарсить как-то так:#!/usr/bin/env python from pyparsing import Word, alphas, nums, oneOf, Optional first = Word( alphas ) + Word( nums ) + "_" + Word( alphas ) + "/" + Word( alphas ) + "_" + Word( nums ) second = "D" third = "N" forth = Word( alphas ) fifth = Word( nums ) sixth = Word( alphas ) seventh = "(" + Word( nums ) + Word( alphas ) + ")" asterisk = "TEnnANT9906_IPPBX/core_99 D N A 5060 OK (15 ms)" asterisk2 = "TEnnANT8819_IPPBX/core_88 D A 35060 Unmonitored" grammar = first + second + Optional(third) + forth + fifth + sixth + Optional(seventh) parsed = grammar.parseString( asterisk ) parsed2 = grammar.parseString( asterisk2 ) print parsed.asList() print parsed2.asList() print parsed[14] try: print parsed2[14] except IndexError: pass $ ./4.py ['TEnnANT', '9906', '_', 'IPPBX', '/', 'core', '_', '99', 'D', 'N', 'A', '5060', 'OK', '(', '15', 'ms', ')'] ['TEnnANT', '8819', '_', 'IPPBX', '/', 'core', '_', '88', 'D', 'A', '35060', 'Unmonitored'] 15
- Проблема в написании регулярного выражения на python, Александр, 13:26 , 05-Ноя-13 (2)
>[оверквотинг удален] > print parsed[14] > try: > print parsed2[14] > except IndexError: > pass > $ ./4.py > ['TEnnANT', '9906', '_', 'IPPBX', '/', 'core', '_', '99', 'D', 'N', 'A', '5060', > 'OK', '(', '15', 'ms', ')'] > ['TEnnANT', '8819', '_', 'IPPBX', '/', 'core', '_', '88', 'D', 'A', '35060', 'Unmonitored'] > 15 Спасибо за помощь, но при выполнении вашего парсинга выдаётся следующая ошибка такого вида: Traceback (most recent call last): File "./asterisk_check.py", line 16, in <module> parsed = grammar.parseString( asterisk ) File "/usr/lib/python2.7/dist-packages/pyparsing.py", line 1076, in parseString raise exc pyparsing.ParseException: Expected "D" (at char 25), (line:1, col:26) С чем может быть связана проблема не подскажете?? Спасибо за помощь
- Проблема в написании регулярного выражения на python, mrrrr, 16:36 , 05-Ноя-13 (3)
> С чем может быть связана проблема не подскажете?? Спасибо за помощь Это не был production ready пример, просто мысль в определенном направлении. :-) Судя по ошибке во второй колонке кроме "D" может быть что-то еще. Как вариант - ничего. Пытался вчера найти описание, что вообще выдает команда asterisk -rx 'sip show peers', но сходу не нашел. Ориентировался на пару строк из вашего примера. А если дейтвительно делать, то логично иметь хорошее представление о предполагаемом выводе. Думаю, это верно и в случае, если вы будете разбирать вывод регулярными выражениями.
- Проблема в написании регулярного выражения на python, mrrrr, 16:54 , 05-Ноя-13 (4)
С другой стороны, если вас awk устраивает, то не overkill ли для вас регулярки? Может, тогда так: with open ('/home/user/sip_show_peers.txt', 'r') as aster_out: for i in aster_out: col = i.split() print col[0], col[6:8]
- Проблема в написании регулярного выражения на python, mrrrr, 20:50 , 05-Ноя-13 (5)
Если нужно кол-во милисекунд, то: with open ('/home/maccalan/sip_show_peers.txt', 'r') as aster_out: for i in aster_out: m = re.search('(\d+) ms', i) if m: print m.group(1)
- Проблема в написании регулярного выражения на python, NuINu, 09:12 , 06-Ноя-13 (6)
> Если нужно кол-во милисекунд, то: > with open ('/home/maccalan/sip_show_peers.txt', 'r') as aster_out: > for i in aster_out: > m = re.search('(\d+) ms', > i) > if m: > > print m.group(1) я полагаю что все таки по мимо миллисекунд надо знать, а на каком пире вышла столь значительная задержка, поэтому просто миллисекунды находить бесполезно. поэтому строку все таки придется разбирать целиком. я предлагаю два этапа, чтобы потом не запутаться в регулярке. import re def work_parse(l): name_symb='[a-zA-Z0-9_]' pattern = '^(' + name_symb + '+)/(' + name_symb + '+)\s+(D\s+N\s+A|D\s+A)\s+(\d+)\s+(.+)' result=re.match(pattern,l) if result: print("find for %s: %s")%(result.group(1), result.group(5)), small_patt='OK\s+\((\d+)' small_res=re.match(small_patt,result.group(5)) if small_res: print " %s(sec)"%small_res.group(1) else: print " Unmonitored" else: print("parse asterisk string error") if __name__=='__main__': import timeit f=open('asterisk_peers', 'r') l=f.readline() while l: #print l work_parse(l) l=f.readline() f.close()
- Проблема в написании регулярного выражения на python, Александр, 11:13 , 06-Ноя-13 (8)
>[оверквотинг удален] > print("parse asterisk string error") > if __name__=='__main__': > import timeit > f=open('asterisk_peers', 'r') > l=f.readline() > while l: > #print l > work_parse(l) > l=f.readline() > f.close() Вы правы, необходимо знать на каком пире такая задержка, интересный ход мысли в вашем скрипте, только что за файл f=open('asterisk_peers', 'r') .. я пробовал через регулярки таким образом: >>> import re >>> asterisk = "TEnnANT9906_IPPBX/core_99 D N A 5060 OK (15 ms)" >>> search_regex = re.compile( ur"\((\d+) ms\)", re.M | re.S | re.U ) >>> match = search_regex.search(asterisk) >>> match.groups() ('15',) но вот имеено мс мало играют роли... А как сделать чтобы команда asterisk -rx 'sip show peers' выполнялась 3 раза, и если все эти три раза на определённом пире есть юольшая задержка(свыше 60 mc), то выдавать в почту.. реализацию отправки в почту я делал таким образом: me = '-----------------' you = '----------------' text = 'Asterisk Problem\n' subj = 'Asterisk Problem' server = "------------" port = 25 msg = MIMEText(text, "", "utf-8") msg['Subject'] = subj msg['From'] = me msg['To'] = you s = smtplib.SMTP(server, port) s.ehlo() s.starttls() s.ehlo() s.sendmail(me, you, msg.as_string()) s.quit()
- Проблема в написании регулярного выражения на python, NuINu, 11:39 , 06-Ноя-13 (11)
> Вы правы, необходимо знать на каком пире такая задержка, интересный ход мысли > в вашем скрипте, только что за файл f=open('asterisk_peers', 'r') ..у меня нет астериска, поэтому ваш вывод я просто скопировал в файл что бы отладить пример. > но вот имеено мс мало играют роли... > А как сделать чтобы команда asterisk -rx 'sip show peers' выполнялась 3 > раза, и если все эти три раза на определённом пире есть > юольшая задержка(свыше 60 mc), то выдавать в почту..
что бы эта команда выполнялась три раза - выполните ее ТРИ раза. а вот что бы сопоставить результаты выполнения команд вам нужно на первом проходе создать хеш массив, ключем в котором сделать имя пира, ну а значением 1, если превышена задержка, или 0 если задержка в норме, выполняя в последствии нужно просто добавлять по 1 в нужные элементы массива, если задержка превышена, по окончании работы проверьте хеш массив, и если найдете там что нибудь равное 3 отправляете на почту имена этих пиров.
- Проблема в написании регулярного выражения на python, Александр, 11:05 , 06-Ноя-13 (7)
>> С чем может быть связана проблема не подскажете?? Спасибо за помощь > Это не был production ready пример, просто мысль в определенном направлении. :-) > Судя по ошибке во второй колонке кроме "D" может быть что-то еще. > Как вариант - ничего. Пытался вчера найти описание, что вообще выдает > команда asterisk -rx 'sip show peers', но сходу не нашел. Ориентировался > на пару строк из вашего примера. А если дейтвительно делать, то > логично иметь хорошее представление о предполагаемом выводе. Думаю, это верно и > в случае, если вы будете разбирать вывод регулярными выражениями.вот полный вывод команды: #asterisk -rx 'sip show peers' Name/username Host Dyn Forcerport ACL Port Status TEnnANT1101_IPPBX/core_11 ip D N A 5063 OK (16 ms) TEnnANT1102_IPPBX/core_11 ip D N A 5060 OK (9 ms) TEnnANT1103_IPPBX/core_11 (Unspecified) D N A 0 UNKNOWN TEnnANT1104_IPPBX/core_11 (Unspecified) D N A 0 UNKNOWN TEnnANT1105_IPPBX/core_11 (Unspecified) D N A 0 UNKNOWN TEnnANT1106_IPPBX/core_11 (Unspecified) D N A 0 UNKNOWN TEnnANT1107_IPPBX/core_11 (Unspecified) D N A 0 UNKNOWN TEnnANT1108_IPPBX/core_11 ip D N A 1092 OK (9 ms) TEnnANT1109_IPPBX/core_11 ip D N A 1093 OK (5 ms) TEnnANT1110_IPPBX/core_11 (Unspecified) D N A 0 UNKNOWN TEnnANT1111_IPPBX/core_11 (Unspecified) D N A 0 UNKNOWN TEnnANT1112_IPPBX/core_11 (Unspecified) D N A 0 UNKNOWN TEnnANT1113_IPPBX/core_11 (Unspecified) D N A 0 UNKNOWN TEnnANT1114_IPPBX/core_11 (Unspecified) D N A 0 UNKNOWN TEnnANT1115_IPPBX/core_11 (Unspecified) D N A 0 UNKNOWN TEnnANT1116_IPPBX/core_11 (Unspecified) D N A 0 UNKNOWN TEnnANT1117_IPPBX/core_11 (Unspecified) D N A 0 UNKNOWN TEnnANT1118_IPPBX/core_11 (Unspecified) D N A 0 UNKNOWN TEnnANT1119_IPPBX/core_11 (Unspecified) D N A 0 UNKNOWN TEnnANT1120_IPPBX/core_11 ip D N A 5061 OK (9 ms) TEnnANT1121_IPPBX/core_11 ip D N A 1103 OK (12 ms) TEnnANT1122_IPPBX/core_11 ip D N A 5062 OK (20 ms) TEnnANT1123_IPPBX/core_11 ip D N A 1041 OK (20 ms) TEnnANT1124_IPPBX/core_11 (Unspecified) D N A 0 UNKNOWN TEnnANT1125_IPPBX/core_11 (Unspecified) D N A 0 Unmonitored TEnnANT1126_IPPBX/core_11 (Unspecified) D N A 0 UNKNOWN TEnnANT1127_IPPBX/core_11 (Unspecified) D N A 0 UNKNOWN TEnnANT1128_IPPBX/core_11 (Unspecified) D N A 0 UNKNOWN TEnnANT1129_IPPBX/core_11 (Unspecified) D N A 0 UNKNOWN TEnnANT1130_IPPBX/core_11 (Unspecified) D N A 0 UNKNOWN TEnnANT1131_IPPBX/core_11 (Unspecified) D N A 0 UNKNOWN TEnnANT1132_IPPBX/core_11 (Unspecified) D N A 0 UNKNOWN TEnnANT1133_IPPBX/core_11 (Unspecified) D N A 0 UNKNOWN TEnnANT1134_IPPBX/core_11 (Unspecified) D N A 0 UNKNOWN TEnnANT1135_IPPBX/core_11 (Unspecified) D N A 0 UNKNOWN TEnnANT1136_IPPBX/core_11 (Unspecified) D N A 0 UNKNOWN TEnnANT1137_IPPBX/core_11 (Unspecified) D N A 0 UNKNOWN TEnnANT1138_IPPBX/core_11 (Unspecified) D N A 0 UNKNOWN TEnnANT1139_IPPBX/core_11 (Unspecified) D N A 0 UNKNOWN TEnnANT1140_IPPBX/core_11 (Unspecified) D N A 0 UNKNOWN TEnnANT1141_IPPBX/core_11 (Unspecified) D N A 0 UNKNOWN TEnnANT1142_IPPBX/core_11 (Unspecified) D N A 0 UNKNOWN TEnnANT1143_IPPBX/core_11 (Unspecified) D N A 0 UNKNOWN TEnnANT1144_IPPBX/core_11 (Unspecified) D N A 0 UNKNOWN TEnnANT1145_IPPBX/core_11 (Unspecified) D N A 0 UNKNOWN TEnnANT1146_IPPBX/core_11 (Unspecified) D N A 0 UNKNOWN TEnnANT1147_IPPBX/core_11 (Unspecified) D N A 0 UNKNOWN TEnnANT1148_IPPBX/core_11 (Unspecified) D N A 0 UNKNOWN TEnnANT1149_IPPBX/core_11 (Unspecified) D N A 0 UNKNOWN TEnnANT1400_IPPBX/core_14 (Unspecified) D N A 0 UNKNOWN TEnnANT1401_IPPBX/core_14 (Unspecified) D N A 0 UNKNOWN TEnnANT1402_IPPBX/core_14 (Unspecified) D N A 0 UNKNOWN TEnnANT1403_IPPBX/core_14 (Unspecified) D N A 0 UNKNOWN TEnnANT1404_IPPBX/core_14 (Unspecified) D N A 0 UNKNOWN TEnnANT1405_IPPBX/core_14 (Unspecified) D N A 0 UNKNOWN TEnnANT1406_IPPBX/core_14 (Unspecified) D N A 0 UNKNOWN TEnnANT1407_IPPBX/core_14 (Unspecified) D N A 0 UNKNOWN TEnnANT1408_IPPBX/core_14 (Unspecified) D N A 0 UNKNOWN TEnnANT1409_IPPBX/core_14 (Unspecified) D N A 0 UNKNOWN TEnnANT1410_IPPBX/core_14 (Unspecified) D N A 0 UNKNOWN TEnnANT1411_IPPBX/core_14 (Unspecified) D N A 0 UNKNOWN TEnnANT1412_IPPBX/core_14 (Unspecified) D N A 0 UNKNOWN TEnnANT1413_IPPBX/core_14 (Unspecified) D N A 0 UNKNOWN TEnnANT1414_IPPBX/core_14 (Unspecified) D N A 0 UNKNOWN TEnnANT1415_IPPBX/core_14 (Unspecified) D N A 0 UNKNOWN TEnnANT1416_IPPBX/core_14 (Unspecified) D N A 0 UNKNOWN TEnnANT1417_IPPBX/core_14 (Unspecified) D N A 0 UNKNOWN TEnnANT1418_IPPBX/core_14 (Unspecified) D N A 0 UNKNOWN TEnnANT1419_IPPBX/core_14 (Unspecified) D N A 0 UNKNOWN TEnnANT1420_IPPBX/core_14 (Unspecified) D N A 0 UNKNOWN TEnnANT1421_IPPBX/core_14 (Unspecified) D N A 0 UNKNOWN TEnnANT1422_IPPBX/core_14 (Unspecified) D N A 0 UNKNOWN TEnnANT1423_IPPBX/core_14 (Unspecified) D N A 0 UNKNOWN TEnnANT1424_IPPBX/core_14 (Unspecified) D N A 0 UNKNOWN TEnnANT1425_IPPBX/core_14 (Unspecified) D N A 0 UNKNOWN TEnnANT1426_IPPBX/core_14 (Unspecified) D N A 0 UNKNOWN TEnnANT1427_IPPBX/core_14 (Unspecified) D N A 0 UNKNOWN TEnnANT1428_IPPBX/core_14 (Unspecified) D N A 0 UNKNOWN TEnnANT1429_IPPBX/core_14 (Unspecified) D N A 0 UNKNOWN TEnnANT1430_IPPBX/core_14 (Unspecified) D N A 0 UNKNOWN TEnnANT1601_IPPBX/core_16 ip D N A 5060 OK (45 ms) TEnnANT1602_IPPBX/core_16 ip D N A 5060 OK (44 ms) TEnnANT1603_IPPBX/core_16 ip D N A 5060 OK (44 ms) TEnnANT1604_IPPBX/core_16 ip D N A 5060 OK (44 ms) TEnnANT1605_IPPBX/core_16 ip D N A 5060 OK (46 ms) TEnnANT1606_IPPBX/core_16 ip D N A 5060 OK (45 ms) TEnnANT1607_IPPBX/core_16 ip D N A 5060 OK (92 ms) TEnnANT1608_IPPBX/core_16 ip D N A 5060 OK (92 ms) TEnnANT1609_IPPBX/core_16 (Unspecified) D N A 0 UNKNOWN TEnnANT1610_IPPBX/core_16 (Unspecified) D N A 0 UNKNOWN TEnnANT1800_IPPBX/core_18 (Unspecified) D N A 0 UNKNOWN TEnnANT1801_IPPBX/core_18 (Unspecified) D N A 0 UNKNOWN TEnnANT1802_IPPBX/core_18 (Unspecified) D N A 0 UNKNOWN TEnnANT1803_IPPBX/core_18 (Unspecified) D N A 0 UNKNOWN TEnnANT1804_IPPBX/core_18 (Unspecified) D N A 0 UNKNOWN TEnnANT1805_IPPBX/core_18 (Unspecified) D N A 0 UNKNOWN TEnnANT1806_IPPBX/core_18 (Unspecified) D N A 0 UNKNOWN TEnnANT1807_IPPBX/core_18 (Unspecified) D N A 0 UNKNOWN TEnnANT1808_IPPBX/core_18 (Unspecified) D N A 0 UNKNOWN TEnnANT1809_IPPBX/core_18 (Unspecified) D N A 0 UNKNOWN TEnnANT1810_IPPBX/core_18 (Unspecified) D N A 0 UNKNOWN TEnnANT1811_IPPBX/core_18 (Unspecified) D N A 0 UNKNOWN TEnnANT1812_IPPBX/core_18 (Unspecified) D N A 0 UNKNOWN TEnnANT1813_IPPBX/core_18 (Unspecified) D N A 0 UNKNOWN TEnnANT1814_IPPBX/core_18 (Unspecified) D N A 0 UNKNOWN TEnnANT1815_IPPBX/core_18 (Unspecified) D N A 0 UNKNOWN TEnnANT2001_IPPBX/core_20 ip D N A 5060 OK (22 ms) TEnnANT2002_IPPBX/core_20 ip D N A 5060 OK (20 ms) TEnnANT2003_IPPBX/core_20 ip D N A 5060 OK (21 ms) TEnnANT2004_IPPBX/core_20 ip D N A 5060 OK (21 ms) TEnnANT2005_IPPBX/core_20 ip D N A 5060 OK (23 ms) TEnnANT2006_IPPBX/core_20 ip D N A 5060 OK (20 ms) TEnnANT2007_IPPBX/core_20 ip D N A 5060 OK (22 ms) TEnnANT2008_IPPBX/core_20 ip D N A 5060 OK (54 ms) TEnnANT2009_IPPBX/core_20 (Unspecified) D N A 0 UNKNOWN
- Проблема в написании регулярного выражения на python, NuINu, 11:27 , 06-Ноя-13 (9)
> вот полный вывод команды: > #asterisk -rx 'sip show peers' Александр, судя по всему у вас нет проблем с питоном? поменяйте чуть мою регулярку, и будет вам счастье. можно так: pattern = '^(' + name_symb + '+)/(' + name_symb + '+)+\s+\S+\s+(D\s+N\s+A|D\s+A)\s+(\d+)\s+(.+)' можно так: ip_symb='[a-zA-Z0-9_()]' pattern = '^(' + name_symb + '+)/(' + name_symb + '+)+\s+' + ip_symb + '+\s+(D\s+N\s+A|D\s+A)\s+(\d+)\s+(.+)'
- Проблема в написании регулярного выражения на python, Александр, 12:22 , 06-Ноя-13 (12)
>> вот полный вывод команды: >> #asterisk -rx 'sip show peers' > Александр, судя по всему у вас нет проблем с питоном? поменяйте чуть > мою регулярку, и будет вам счастье. > можно так: > pattern = '^(' + name_symb + '+)/(' + name_symb + '+)+\s+\S+\s+(D\s+N\s+A|D\s+A)\s+(\d+)\s+(.+)' > можно так: > ip_symb='[a-zA-Z0-9_()]' > pattern = '^(' + name_symb + '+)/(' + name_symb + '+)+\s+' + > ip_symb + '+\s+(D\s+N\s+A|D\s+A)\s+(\d+)\s+(.+)' Спасибо за помощь,попробую,отпишусь..
- Проблема в написании регулярного выражения на python, pavel_simple, 11:35 , 06-Ноя-13 (10) +1
ИМХО неправильная постановка задачи всегда ведёт к неправильному/неоптимальному её решениюgoogle asterisk+snmp google python+snmp
|