Python3、Tkinter GUI、Juniper Switch DevOps任务
Python 3, Tkinter GUI, Juniper Switch DevOps task
我已经做 python 大约 3 周了,所以对它还很陌生。不要用我的代码来评判我! :)
我制作了一个应用程序,只需单击一个按钮即可执行基本的网络操作功能,任务如下:
禁用/启用接口
禁用/启用接口安全
显示界面 Vlan/Status
基于计算机名称自动查找的交换机数据库。
但是,我最不需要的是能够检查交换机上的日志文件,然后每隔几秒 运行 更新一次以获得最后几个条目。这用于在用户断开连接然后再次插入时通过监视接口的 up/down 状态来查找用户。
我得到了提取文件的代码,将其剪切成一个列表,然后编辑列表以显示最后 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 切换 on/off 并每隔几秒让它 运行 以便它可以显示 up/down 消息出现在几乎实时地关闭开关的日志需要几秒钟的时间。
目前我的代码在 def 运行ning 期间锁定。我正在寻找的是某种子流程?我可以将它推到主循环不受其 运行ning 的影响吗?所以我可以“当按钮 x 为真时:(执行功能)并且不停止 GUI 工作。
我的 skill/knowledge 即将结束,我似乎无法在 Google 上看到好的答案!也许我只是不知道如何称呼修复!
任何帮助都会很棒!
瑞安
AMC,
感谢您为我指明了正确的方向!线程是我所缺少的一点!
所以经过更多 Google-ing 和摸索之后,我找到了正确的例子。
import time
import threading
def threadingFunc():
t1 = threading.Thread(target=theFunctionToRun)
t1.start()
def theFunchtionToRun():
#do stuff here#
checkbox that calls the function threadingFunc
这就成功了,现在我的 GUI 保持活动状态,我的“监视器 interface-logs”等效功能非常棒!
谢谢!
瑞安
我已经做 python 大约 3 周了,所以对它还很陌生。不要用我的代码来评判我! :)
我制作了一个应用程序,只需单击一个按钮即可执行基本的网络操作功能,任务如下: 禁用/启用接口 禁用/启用接口安全 显示界面 Vlan/Status 基于计算机名称自动查找的交换机数据库。
但是,我最不需要的是能够检查交换机上的日志文件,然后每隔几秒 运行 更新一次以获得最后几个条目。这用于在用户断开连接然后再次插入时通过监视接口的 up/down 状态来查找用户。
我得到了提取文件的代码,将其剪切成一个列表,然后编辑列表以显示最后 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 切换 on/off 并每隔几秒让它 运行 以便它可以显示 up/down 消息出现在几乎实时地关闭开关的日志需要几秒钟的时间。
目前我的代码在 def 运行ning 期间锁定。我正在寻找的是某种子流程?我可以将它推到主循环不受其 运行ning 的影响吗?所以我可以“当按钮 x 为真时:(执行功能)并且不停止 GUI 工作。
我的 skill/knowledge 即将结束,我似乎无法在 Google 上看到好的答案!也许我只是不知道如何称呼修复!
任何帮助都会很棒!
瑞安
AMC,
感谢您为我指明了正确的方向!线程是我所缺少的一点!
所以经过更多 Google-ing 和摸索之后,我找到了正确的例子。
import time
import threading
def threadingFunc():
t1 = threading.Thread(target=theFunctionToRun)
t1.start()
def theFunchtionToRun():
#do stuff here#
checkbox that calls the function threadingFunc
这就成功了,现在我的 GUI 保持活动状态,我的“监视器 interface-logs”等效功能非常棒!
谢谢!
瑞安