synsynackack
asked on
Python multiple IF statements
Hi Experts,
The script is currently only looking at the first IF statement and not corresponding IF statements when the condition does not match.
Hope someone can shed some light on the following script (Run in Securecrt) to log into the console port for a Cisco device and look for prompts and execute corresponding lines.
Thank you
# $language = "python"
# $interface = "1.0"
# Connect to an SSH server using the SSH2 protocol. Specify the
# username and password and hostname on the command line as well as
# some SSH2 protocol specific options.
# msgbox = crt.Dialog.MessageBox
def main():
# Prompt for a password instead of embedding it in a script...
#
# passwd = crt.Dialog.Prompt("Enter password for " + host, "Login", "", True)
passwd = crt.Dialog.Prompt
# Build a command-line string to pass to the Connect method.
cmd = "/SERIAL COM6 /BAUD 9600 /NOCTS /DATA 8 /NODSR /PARITY NONE /NOXON"
crt.Session.Connect(cmd, False)
crt.Screen.Synchronous = True
# This line will need to be modified to wait for what the remote will send.
crt.Screen.Send(chr(13))
initial_1 = crt.Screen.WaitForString(" outer")
initial_2 = crt.Screen.WaitForString(" initial configuration dialog")
initial_3 = crt.Screen.WaitForString(" con0")
initial_4 = crt.Screen.WaitForString(" odified")
initial_5 = crt.Screen.WaitForString(" Press RETURN to get started")
if initial_1 == True:
crt.Screen.Send("en" + chr(13))
crt.Screen.WaitForString(" Password", 2)
crt.Screen.Send("password" + chr(13))
crt.Screen.WaitForString(" #")
crt.Screen.Send("erase startup-config" + chr(13))
crt.Screen.WaitForString(" Erasing")
crt.Screen.Send(chr(13))
crt.Screen.WaitForString(" #")
crt.Screen.Send("delete nvram:vlan.dat" + chr(13))
crt.Screen.WaitForString(" vlan.dat")
crt.Screen.Send(chr(13))
crt.Screen.WaitForString(" confirm")
crt.Screen.Send(chr(13))
crt.Screen.Send(chr(13))
crt.Screen.WaitForString(" #")
crt.Screen.Send("reload" + chr(13))
crt.Screen.Send(chr(13))
crt.Screen.WaitForString(" System configuration has been modified", 2)
crt.Screen.Send("no" + chr(13))
crt.Screen.WaitForString(" Proceed with reload", 2)
crt.Screen.Send(chr(13))
if initial_2 == True:
crt.Screen.Send("no" + chr(13))
crt.Screen.Send(chr(13))
crt.Screen.WaitForString(" Would you like to terminate autoinstall", 3)
crt.Screen.Send(chr(13))
crt.Screen.Send(chr(13))
if initial_3 == True:
crt.Screen.Send(chr(13))
crt.Screen.WaitForString(" rt1")
crt.Screen.Send("en" + chr(13))
crt.Screen.WaitForString(" Password")
crt.Screen.Send("password" + chr(13))
crt.Screen.WaitForString(" #")
crt.Screen.Send("erase startup-config" + chr(13))
crt.Screen.WaitForString(" Erasing")
crt.Screen.Send(chr(13))
crt.Screen.WaitForString(" #")
crt.Screen.Send("delete nvram:vlan.dat" + chr(13))
crt.Screen.WaitForString(" vlan.dat")
crt.Screen.Send(chr(13))
crt.Screen.WaitForString(" confirm")
crt.Screen.Send(chr(13))
crt.Screen.Send(chr(13))
crt.Screen.WaitForString(" #")
crt.Screen.Send("reload" + chr(13))
crt.Screen.Send(chr(13))
if initial_4 == True:
crt.Screen.Send(chr(13))
crt.Screen.WaitForString(" confirm")
crt.Screen.Send(chr(13))
crt.Screen.Send(chr(13))
if initial_5 == True:
crt.Screen.Send(chr(13))
#
crt.Screen.Send("en" + chr(13))
#
crt.Screen.Send("delete flash:vlan.dat" + chr(13))
#
crt.Screen.Send(chr(13))
crt.Screen.Send(chr(13))
crt.Screen.Send(chr(13))
crt.Screen.WaitForString(" #")
#
crt.Screen.Send("config t" + chr(13))
crt.Screen.WaitForString(" config")
#
crt.Screen.Send("interface Cellular0/1/0" + chr(13))
crt.Screen.WaitForString(" config")
crt.Screen.Send("shut" + chr(13))
crt.Screen.WaitForString(" config")
#
crt.Screen.Send("end" + chr(13))
crt.Screen.WaitForString(" #")
The script is currently only looking at the first IF statement and not corresponding IF statements when the condition does not match.
Hope someone can shed some light on the following script (Run in Securecrt) to log into the console port for a Cisco device and look for prompts and execute corresponding lines.
Thank you
# $language = "python"
# $interface = "1.0"
# Connect to an SSH server using the SSH2 protocol. Specify the
# username and password and hostname on the command line as well as
# some SSH2 protocol specific options.
# msgbox = crt.Dialog.MessageBox
def main():
# Prompt for a password instead of embedding it in a script...
#
# passwd = crt.Dialog.Prompt("Enter password for " + host, "Login", "", True)
passwd = crt.Dialog.Prompt
# Build a command-line string to pass to the Connect method.
cmd = "/SERIAL COM6 /BAUD 9600 /NOCTS /DATA 8 /NODSR /PARITY NONE /NOXON"
crt.Session.Connect(cmd, False)
crt.Screen.Synchronous = True
# This line will need to be modified to wait for what the remote will send.
crt.Screen.Send(chr(13))
initial_1 = crt.Screen.WaitForString("
initial_2 = crt.Screen.WaitForString("
initial_3 = crt.Screen.WaitForString("
initial_4 = crt.Screen.WaitForString("
initial_5 = crt.Screen.WaitForString("
if initial_1 == True:
crt.Screen.Send("en" + chr(13))
crt.Screen.WaitForString("
crt.Screen.Send("password"
crt.Screen.WaitForString("
crt.Screen.Send("erase startup-config" + chr(13))
crt.Screen.WaitForString("
crt.Screen.Send(chr(13))
crt.Screen.WaitForString("
crt.Screen.Send("delete nvram:vlan.dat" + chr(13))
crt.Screen.WaitForString("
crt.Screen.Send(chr(13))
crt.Screen.WaitForString("
crt.Screen.Send(chr(13))
crt.Screen.Send(chr(13))
crt.Screen.WaitForString("
crt.Screen.Send("reload" + chr(13))
crt.Screen.Send(chr(13))
crt.Screen.WaitForString("
crt.Screen.Send("no" + chr(13))
crt.Screen.WaitForString("
crt.Screen.Send(chr(13))
if initial_2 == True:
crt.Screen.Send("no" + chr(13))
crt.Screen.Send(chr(13))
crt.Screen.WaitForString("
crt.Screen.Send(chr(13))
crt.Screen.Send(chr(13))
if initial_3 == True:
crt.Screen.Send(chr(13))
crt.Screen.WaitForString("
crt.Screen.Send("en" + chr(13))
crt.Screen.WaitForString("
crt.Screen.Send("password"
crt.Screen.WaitForString("
crt.Screen.Send("erase startup-config" + chr(13))
crt.Screen.WaitForString("
crt.Screen.Send(chr(13))
crt.Screen.WaitForString("
crt.Screen.Send("delete nvram:vlan.dat" + chr(13))
crt.Screen.WaitForString("
crt.Screen.Send(chr(13))
crt.Screen.WaitForString("
crt.Screen.Send(chr(13))
crt.Screen.Send(chr(13))
crt.Screen.WaitForString("
crt.Screen.Send("reload" + chr(13))
crt.Screen.Send(chr(13))
if initial_4 == True:
crt.Screen.Send(chr(13))
crt.Screen.WaitForString("
crt.Screen.Send(chr(13))
crt.Screen.Send(chr(13))
if initial_5 == True:
crt.Screen.Send(chr(13))
#
crt.Screen.Send("en" + chr(13))
#
crt.Screen.Send("delete flash:vlan.dat" + chr(13))
#
crt.Screen.Send(chr(13))
crt.Screen.Send(chr(13))
crt.Screen.Send(chr(13))
crt.Screen.WaitForString("
#
crt.Screen.Send("config t" + chr(13))
crt.Screen.WaitForString("
#
crt.Screen.Send("interface
crt.Screen.WaitForString("
crt.Screen.Send("shut" + chr(13))
crt.Screen.WaitForString("
#
crt.Screen.Send("end" + chr(13))
crt.Screen.WaitForString("
ASKER
Sorry about that, please let me rephrase my question:
The script is suppose to log into the Cisco device (via console port), look for a matching IF statement and execute the corresponding code.
The script currently only attempts to match the first IF statement and ignores the rest.
How would it be possible for the script to search down the list of IF statements and execute the relevant one(IF True)?
Thank you
The script is suppose to log into the Cisco device (via console port), look for a matching IF statement and execute the corresponding code.
The script currently only attempts to match the first IF statement and ignores the rest.
How would it be possible for the script to search down the list of IF statements and execute the relevant one(IF True)?
Thank you
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
Hi jmcg,
Managed to work out the issue, will post the script after some further testing.
Thanks for your advice.
Managed to work out the issue, will post the script after some further testing.
Thanks for your advice.
There's a language called "Expect" that started out in the TCL/TK world, but has versions for Perl and for Python (Pexpect). There quite a bit to learn, but once you've got the hang of it, it works much better for scripting interactions like this.