Python 3, графический интерфейс Tkinter, задача Juniper Switch DevOps

Я занимаюсь питоном около 3 недель, так что он очень новичок. Не судите меня по моему коду! :)

Я сделал приложение, позволяющее выполнять основные функции сетевых операций одним нажатием кнопки, такие задачи, как: Отключение/включение интерфейса Отключение/включение безопасности интерфейса Показать интерфейс База данных Vlan/Status коммутаторов с автоматическим поиском на основе имени компьютера.

Однако последнее, что мне нужно, — это иметь возможность проверять файл журнала на коммутаторе, а затем каждые несколько секунд запускать обновление, чтобы получить последние несколько записей. Это используется для поиска пользователя, отслеживая состояние интерфейса на наличие / отключение, когда они отключают свое соединение, а затем снова подключают его.

У меня есть код для извлечения файла, вырезанного из него в список, а затем отредактируйте список, чтобы отобразить последние 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. Я ищу какие-то подпроцессы? Я могу нажать это, чтобы основной цикл не влиял на его работу? Так что я могу иметь, пока кнопка x верна: (выполнить функцию) и не останавливать работу графического интерфейса.

У меня заканчиваются мои навыки/знания, и я не могу найти хороший ответ в Google! может быть, я просто не знаю, как назвать исправление!

Любая помощь будет здорово!

Райан


person Ryan    schedule 01.09.2020    source источник
comment
и я не могу найти хороший ответ в Google! Что вы искали? Вы изучали потоки?   -  person AMC    schedule 02.09.2020
comment
Я сейчас посмотрю и вернусь к вам! Спасибо, что вернулись ко мне!   -  person Ryan    schedule 02.09.2020
comment
while count < 10: — это бесконечный цикл, поскольку внутри цикла ничего не меняется count.   -  person jasonharper    schedule 02.09.2020
comment
Извините, это было в коде, я, должно быть, пропустил это во время копирования и вставки.   -  person Ryan    schedule 04.09.2020


Ответы (1)


АМС,

Спасибо, что указали мне правильное направление! Threading — это то, чего мне не хватало!

Итак, немного погуглив и почесав голову, я нашел правильный пример.

import time
import threading

def threadingFunc():
    t1 = threading.Thread(target=theFunctionToRun)
    t1.start()

def theFunchtionToRun():
    #do stuff here#

checkbox that calls the function threadingFunc

И это помогло, теперь мой графический интерфейс остается живым, а мой аналог интерфейса монитора и журналов работает как шарм!

Благодарю вас!

Райан

person Ryan    schedule 02.09.2020