Jun-12-2019, 09:13 PM
Hi, Anyone here tried threading method in sending command to cisco device? Currently having issues moving from main to beg_rm function using the below code for threading.
My functions:
def ping_ip(ip)
def send_cmd(?)
def beg_rm(ip,uname,ppass,enpass,lcmd):
def main()
My functions:
def ping_ip(ip)
def send_cmd(?)
def beg_rm(ip,uname,ppass,enpass,lcmd):
def main()
<CUT> #def send_cmd() #run a single command to devices? def beg_rm(ip,uname,ppass,enpass,lcmd): print "Begin remote connection",ip child = pexpect.spawn('ssh %s@%s' %(uname, ip)) try: i = child.expect(['Password: ', 'Username: ','(yes\/no)? ','#',pexpect.EOF,pexpect.TIMEOUT],timeout=5) if i == 0: child.sendline(ppass) child.expect('>') child.sendline('enable') child.expect('Password: ') child.sendline(enpass) elif i == 1: child.sendline(uname) child.expect('Password: ') child.sendline(ppass) child.expect('>') child.sendline(enpass) elif i == 2: child.sendline('yes') child.expect('Password: ') child.sendline(ppass) child.expect('>') child.sendline('enable') child.expect('Password: ') child.sendline(enpass) return 'OK' elif i == 3: pass #Push Commands for w in lcmd: #coms = w.strip() print "\n-- Processing command ",w child.expect ('#') child.sendline(w) child.expect ('#') #print "Executed command", cmd time.sleep(1) show = str(child.before) print(show) except: print "Error accessing the device" return "Failed" def main(): print('-'*50) while True: print('------------------------- ue Network Tools -------------------------------') print('--- *********************************************************************** ---') print('-'*80) print'[1] Troubleshoot' print'[2] Custom Tshoot' print'[3] Wireless LAN' print'[4] Confinder' print'[q] exit\n' #Select Function input_select = raw_input('Please select a function: ') input_select = str(input_select) if input_select == 'q' or input_select == 'Q': sys.exit() elif input_select == '1': #Read the txt file devtxt = open('devices.txt') devlist = devtxt.read().splitlines() print devlist cmdtxt = open('command.txt') cmdlist = cmdtxt.read().splitlines() print cmdlist tuname = raw_input("TACACS Username: ") tpass=getpass.getpass("TACACS Password: ") epass=getpass.getpass("Enable Password: ") #LIST gips = [] threadslist = [] #Verify Reachability for ips in devlist: print "Processing the list to function", ips response = ping_ip(ips) result = ('%s \n' % (response)) print result if re.findall(r'(?:[\d]{1,3})\.(?:[\d]{1,3})\.(?:[\d]{1,3})\.(?:[\d]{1,3})',str(response)): forgips = re.findall(r'(?:[\d]{1,3})\.(?:[\d]{1,3})\.(?:[\d]{1,3})\.(?:[\d]{1,3})',str(response)) strgips = ''.join(forgips) #print "FORGIPS 2",strgips gips.append(strgips) pass else: pass print "\nList of reachable devices to be sent for threading:\n", gips #HAVING ISSUE ON THIS PART ITHINK #try: for x in gips: x = x.strip() print "\nInitiate connection to ",x t = threading.Thread(target = beg_rm, args = (x,tuname,tpass,epass,cmdlist)) threadslist.append(t) t.start for t in threadslist: t.join() # else: # print "Exiting" if __name__ == '__main__': main()