Hello All,
I havn't been programming with python too long, but decided the best way to learn it would be to dive right in. Right now I have been taking snippets here and there along with modifying some code in between to create some programs. The one I am currently doing requires me to ssh to a raritan, choose one of the cisco devices ( a router in this case) and shut down or bring up the interface based on the check boxes selected. My issue is that pexpect keeps timing out with an error when i go into the cisco device. I have a feeling it has something to do with the prompt expected, but I am not sure. Here is the code below of what I currently have. Any help or comments would be appreciated.
Make note, ignore the ip address field. Right now I hard coded everything just to ensure it works. There is also some test commands in there that I fooled around with.
from Tkinter import *
import os
import getpass
import sys
import telnetlib
import pexpect
import re
class Application(Frame):
""" GUI application """
def __init__(self, master):
""" Initialize Frame. """
Frame.__init__(self, master)
self.grid()
self.create_widgets()
def create_widgets(self):
""" Create widgets """
# create instruction label
Label(self,
text = "Connect to Device:\n"
).grid(row = 0, column = 0, columnspan = 2, sticky = W)
# create a label and text entry for IP Address
Label(self,
text = "IP Address: "
).grid(row = 1, column = 0, sticky = W)
self.ipaddress = Entry(self)
self.ipaddress.grid(row = 1, column = 1, sticky = W)
# create a label for student check buttons
Label(self,
text = "Student(s):"
).grid(row = 2, column = 0, sticky = W)
# create check button
self.student1 = BooleanVar()
Checkbutton(self,
text = "Student 1",
variable = self.student1
).grid(row = 2, column = 1, sticky = W)
# create check button
self.student2 = BooleanVar()
Checkbutton(self,
text = "Student 2",
variable = self.student2
).grid(row = 2, column = 2, sticky = W)
# create check button
self.student3 = BooleanVar()
Checkbutton(self,
text = "Student 3",
variable = self.student3
).grid(row = 3, column = 1, sticky = W)
# create check button
self.student4 = BooleanVar()
Checkbutton(self,
text = "Student 4",
variable = self.student4
).grid(row = 3, column = 2, sticky = W)
# create a submit button = ON
Button(self,
text = "ON",
command = self.on
).grid(row = 6, column = 1, sticky = W)
# create a submit button = OFF
Button(self,
text = "OFF",
command = self.off
).grid(row = 6, column = 2, sticky = W)
def on(self):
print ssh.command("mkdir test")
#print ssh.command("cisco")
#print ssh.command("p")
#print ssh.command("18")
#print ssh.command("s")
#print ssh.command("d")
#print ssh.command("config t")
if self.student1.get():
print ssh.command("int eth 0/18")
print ssh.command("shutdown")
if self.student2.get():
comstu2 = "mkdir student2"
print ssh.command(comstu2)
if self.student3.get():
comstu3 = "mkdir student3"
print ssh.command(comstu3)
if self.student4.get():
comstu4 = "mkdir student4"
print ssh.command(comstu4)
def off(self):
ssh.close()
raw_input("Press Enter to Exit")
class SSH:
def __init__(self):
PROMPT = "\$|\%|\>"
password = "PASSWORD"
self.child = pexpect.spawn("ssh -p XXX USER@IP")
i = self.child.expect(['assword:', r"yes/no"], timeout=120)
if i==0:
self.child.sendline(password)
elif i==1:
self.child.sendline("yes")
self.child.expect("assword:", timeout=120)
self.child.sendline(password)
self.child.expect(PROMPT)
def command(self, command):
"""send a command and return the response"""
PROMPT = "\$|\%|\>"
self.child.sendline(command)
self.child.expect(PROMPT)
response = self.child.before
return response
def cisco_command(self, cisco_command):
"""send a command and return the response"""
PROMPT = "\<"
self.child.sendline(cisco_command)
self.child.expect(PROMPT)
response = self.child.before
return response
def close(self):
"""close the connection"""
self.child.close()
def interact(self):
"""interaction with the remote box"""
self.child.interact()
# main
import os
import getpass
import sys
import telnetlib
from Tkinter import *
root = Tk()
root.title("Turn Firewall Mode ON/OFF")
ssh = SSH()
app = Application(root)
root.mainloop()