Home > Back-end >  how to call netmiko ConnectHandler from another py page and execute it only with button in choose
how to call netmiko ConnectHandler from another py page and execute it only with button in choose

Time:11-16

I need to be able to call the script from the scripter.py by choosing it from the drop-down list and clicking a button to run it and get the output in the same window. so I have 2 main problems the first is how to call netmiko ConnectHandler from another py page and execute it only with button in choose the problem is when I run the main.py it executes the scripter.py automatically after that the tkinter is opens

the second is a don't know how to export the output from scripter.py to the main.py and show it in tkinter

So my (scripter.py) looks like

from netmiko import ConnectHandler
    
fortinet_device = {
    'device_type': 'fortinet',
    'ip': 'X.X.X.X',
    'username': 'Username',
    'password': 'Password'
}
    
net_connect = ConnectHandler(**fortinet_device)
    
cmd = ['get sys arp']
output = ''
for command in cmd:
    output  = net_connect.send_command(command)
    
print(output)

And my main page is (main.py)

from tkinter import *
from scripter import cmd

master = Tk(className="Test")
master.geometry("300x300")

def func(selected_item):
    print(repr(selected_item.strip()))

#************main_menu menu***********
main_menu = StringVar(master)
    
#***********dependent_menu menu*********
dependent_menu = StringVar(master)

#************main_menu values**************
show_arp = cmd 
show_add = 'show firewall address'

#***********dependent_menu values************
grep = '|grep'

# main_menu default value
main_menu.set(show_arp)

# dependent_menu default value
dependent_menu.set(grep)

#************main_menu**************
w = OptionMenu(master, main_menu, show_arp, show_add, "three")
w.pack(side=TOP)

#**************dependent_menu***************
s = OptionMenu(master, dependent_menu, grep)
s.pack(side=LEFT)

mainloop()

CodePudding user response:

First you need to put the code inside scripter.py inside a function, for example:

from netmiko import ConnectHandler

def get_sys_arp():
    fortinet_device = {
        'device_type': 'fortinet',
        'ip': 'X.X.X.X',
        'username': 'username',
        'password': 'password'
    }
        
    net_connect = ConnectHandler(**fortinet_device)
        
    cmd = ['get sys arp']
    output = ''
    for command in cmd:
        output  = net_connect.send_command(command)
        
    print(output)

Then import this function inside main.py and execute it when the corresponding item in OptionMenu is selected:

from tkinter import *
from scripter import get_sys_arp   # import the function from scripter

master = Tk(className="Test")
master.geometry("300x300")

def func(selected_item):
    print(repr(selected_item.strip()))
    if selected_item == 'show arp':
        get_sys_arp()  # execute the function

#************main_menu menu***********
main_menu = StringVar(master)

#***********dependent_menu menu*********
dependent_menu = StringVar(master)

#************main_menu values**************
show_arp = 'show arp'   # item text for running get_sys_arp()
show_add = 'show firewall address'

#***********dependent_menu values************
grep = '|grep'

# main_menu default value
main_menu.set(show_arp)

# dependent_menu default value
dependent_menu.set(grep)

#************main_menu**************
# add command=func to execute func() when a item is selected
w = OptionMenu(master, main_menu, show_arp, show_add, "three", command=func)
w.pack(side=TOP)

#**************dependent_menu***************
s = OptionMenu(master, dependent_menu, grep)
s.pack(side=LEFT)

mainloop()
  • Related