#python #python-3.x #juniper #junos-automation
#python #python-3.x #juniper #junos-автоматизация
Вопрос:
Я занимаюсь python уже около 3 недель, поэтому очень новичок в нем. Не судите меня по моему коду! 🙂
Я создал приложение, позволяющее выполнять основные функции сетевых операций одним нажатием кнопки, такие задачи, как: Отключить / включить интерфейс, Отключить / Включить безопасность интерфейса, показать интерфейс Vlan / базу данных состояния коммутаторов с автоматическим поиском на основе имени компьютера.
Однако последнее, что мне нужно, это иметь возможность проверять файл журнала на коммутаторе, а затем каждые несколько секунд запускать обновление, чтобы получить последние несколько записей. Это используется для поиска пользователя путем мониторинга интерфейса на предмет состояния «Вверх» / «вниз», когда они отключают свое соединение, а затем снова подключают его.
Я получил код для извлечения файла, вырезал, разделил его на список, затем отредактировал список, чтобы отобразить последние 10 записей: для взаимодействия с коммутатором используется библиотека Junos-EZNC:
def monitorInterface():
username = usernameEntry.get() # Get username from entrybox in mainWindow
password1 = passwordEntry.get() # Get password from entrybox in mainWindow
hostIP = SwitchIPEntry.get() # Get switch IP from entrybox in mainWindow
switchPort = SwitchPortEntry.get() # Get switchport from entrybox in mainWindow
count = 0
with Device(host=hostIP, user=username, password=password1) as dev: # Logon bits
dev.open() # Open connection
while count < 10:
logReturn = dev.rpc.get_log(filename='messages') # Grab file
logReturn1 = etree.tostring(logReturn, encoding='unicode', pretty_print=True) # convert file to readable
logReturn2 = logReturn1.split('n') # Split file in to list based on new line
logReturn3 = logReturn2[-10:] # read last 10 results of the list
TextBoxData.insert(INSERT, logReturn3) # Print List of 10 in textbox
dev.close()
Проблема, с которой я сталкиваюсь, заключается в том, что я хочу, чтобы этот def включался / выключался и запускался каждые несколько секунд, чтобы он мог отображать сообщение up / down, которое появляется в журнале, который снимается с коммутатора, практически в режиме реального времени, плюс-минус несколько секунд.
На данный момент мой код блокируется во время выполнения def. То, что я ищу, — это какие-то подпроцессы? Я могу включить это, чтобы его запуск не влиял на основной цикл? Таким образом, я могу иметь «пока кнопка x имеет значение true: (выполнить функцию) и не останавливать работу графического интерфейса.
Я нахожусь на пределе своих навыков / знаний, и, похоже, я не вижу хорошего ответа в Google! может быть, я просто не знаю, как назвать исправление!
Любая помощь была бы отличной!
Райан
Комментарии:
1. и я, похоже, не вижу хорошего ответа в Google! Что вы искали? Вы изучали потоковую обработку?
2. Я посмотрю сейчас и вернусь к вам! Спасибо, что перезвонили мне!
3.
while count < 10:
это бесконечный цикл, учитывая, что внутри цикла ничего не меняетсяcount
.4. Извините, в коде было, я, должно быть, пропустил это во время копирования и вставки.
Ответ №1:
AMC,
Спасибо, что указали мне правильное направление! Мне не хватало многопоточности!
Итак, после еще немного поисков в Google и ломания головы я нашел правильный пример.
import time
import threading
def threadingFunc():
t1 = threading.Thread(target=theFunctionToRun)
t1.start()
def theFunchtionToRun():
#do stuff here#
checkbox that calls the function threadingFunc
И это сделало свое дело, теперь мой графический интерфейс остается живым, а мой эквивалент «monitor interface-logs» работает как шарм!
Спасибо!
Райан