Форум сайта python.su
Привет, пусть находит первую строку, вообще это исключительные случай где 2 мака, т.к. маки клиентские повторяющихся нет, мы их будем игнорировать.
Офлайн
Тогда так:
def findinfo(mac):
for line in fileinput.input(glob.glob('/home/bin/py_scripts/vlan/vlan*.txt')):
if not '#' in line and mac in line:
return line
data = findinfo(mac)
if data:
ip = data.split()[0]
name = data.split()[-1]
else:
ip = "!<Not registered on dhcp server>!"
name = ''
Офлайн
EdЕсли не сложно буду рад и благодарен за одно и поучусь.
Тогда так:А наверху обрабатывать так:def findinfo(mac):
for line in fileinput.input(glob.glob('/home/bin/py_scripts/vlan/vlan*.txt')):
if not '#' in line and mac in line:
return lineЯ уже говорил, что код выглядит ужасно? Не хочешь улучшить? Могу помочь.data = findinfo(mac)
if data:
ip = data.split()[0]
name = data.split()[-1]
else:
ip = "!<Not registered on dhcp server>!"
name = ''
python show_mac.py
Input switch NAME or IP address:mon3-33
PORT VLAN TYPE MAC ADDRESS IP ADDRESS NAME
-----------------------------------------------------------------
26 11 dynamic 00:14:85:28:d8:86 10.0.255.254 all-gateway
Traceback (most recent call last):
File "show_mac.py", line 65, in <module>
dmac()
File "show_mac.py", line 48, in dmac
data = findinfo(mac)
File "show_mac.py", line 60, in findinfo
for line in fileinput.input(glob.glob('/home/bin/py_scripts/vlan/vlan*.txt')):
File "/usr/lib/python2.6/fileinput.py", line 102, in input
raise RuntimeError, "input() already active"
RuntimeError: input() already active
Офлайн
avdoshkinпрограмма в текущем состоянии выглядит как монолит. Для начала подумай как ее разбить на отдельные функционально законченные куски, например: присоединение к коммутатору, получение данных от коммутатора, обработка данных, вывод результатов.
Если не сложно буду рад и благодарен за одно и поучусь.
RuntimeError: input() already activeТогда можем вернуться к тому варианту, что я предлагал, без fileinput:
def findinfo(mac):
for fname in glob.glob('/home/bin/py_scripts/vlan/vlan*.txt'):
for line in open(fname):
if not '#' in line and mac in line:
return line
def findinfo(mac):
finput = fileinput.input(glob.glob('/home/bin/py_scripts/vlan/vlan*.txt'))
for line in finput:
if not '#' in line and mac in line:
finput.close()
return line
Офлайн
На здоровье :) Я бы все-таки рекомендовал потратить какое-то время еще на эту программу. Иначе этот чукотский стиль ‘что вижу, то пою’ так и сохранится. А это нехорошо.
Офлайн
EdEd, по стилю немного не понятно, что ты имел в виду, т.к. опыта совсем мало по написанию. на самом деле так и пишу ‘что вижу, то пою’. Если не сложно поясни прописные истины. Что не так в скрипте, немного ты пояснял, если есть еще комментарии поясни пожалуйста.
На здоровье :) Я бы все-таки рекомендовал потратить какое-то время еще на эту программу. Иначе этот чукотский стиль ‘что вижу, то пою’ так и сохранится. А это нехорошо.
Офлайн
Я же пару постов назад предложил направление мысли. Жду реакции в виде кода.
Офлайн
EdЗамерил время выполнения своего скрипта но с разными функциями, результат:
Я же пару постов назад предложил направление мысли. Жду реакции в виде кода.
def findinfo(mac):
finput = fileinput.input(glob.glob('/home/bin/py_scripts/vlan/vlan*.txt'))
for line in finput:
if not '#' in line and mac in line:
finput.close()
return line
Время обработки 0m11.805s
def findinfo(mac):
for fname in glob.glob('/home/bin/py_scripts/vlan/vlan*.txt'):
for line in open(fname):
if not '#' in line and mac in line:
return line
Время обработки 0m5.836s
Офлайн
Если прекратить эту странную практику для каждой строки читать все файлы, то работать будет намного быстрее.
Офлайн
Всем привет!
Есть строка вида a = ‘1-6,8-23,25-26’
как описать с помощью инструкций: если есть “-”, то делать по нему сплит, получить 2 числа - начало и конец отрезка и цикл от начала до конца в результате получить следующие:
1,2,3,4,5,6,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26
Офлайн