python多執行緒批量操作交換機
阿新 • • 發佈:2021-08-04
import time import socket import threading def device_info(): ip_list = [] name_list = [] user_list = [] passwd_list = [] f = open('devices_list.txt',encoding='UTF-8') for line in f.readlines(): line_s = line.split() device_ip = line_s[0] device_name = line_s[1] username = line_s[2] passwd = line_s[3] ip_list.append(device_ip) name_list.append(device_name) user_list.append(username) passwd_list.append(passwd) f.close() return ip_list,name_list,user_list,passwd_list def ssh_f(ip,name,user,passwd): data = time.strftime('%Y-%m-%d') ssh_client = paramiko.SSHClient() ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh_client.connect(hostname=ip, username=user, password=passwd) print('成功連線', ip, name,'\n') cmd_file = open('cmd.txt', 'r') cmds = cmd_file.readlines() log = open(r'D:\BaiduNetdiskDownload\test\巡檢日誌\\' + ip + name + data + '.txt', 'a') command = ssh_client.invoke_shell() command.send('terminal length 0\n') # 取消單屏顯示 for cmd in cmds: command.send(cmd+'\n') time.sleep(1) output = command.recv(65535) log.write(output.decode('UTF-8')) print(ip + '日誌載入成功'+'\n') ssh_client.close() log.close() def main(): device_authentication_failed_list = [] device_not_reachable_list = [] ip_list,name_list,user_list,passwd_list = device_info() for ip,name,user,passwd in zip(ip_list,name_list,user_list,passwd_list): # 遍歷多個列表可以用zip try: a = threading.Thread(target=ssh_f,args=(ip,name,user,passwd)) a.start() except paramiko.ssh_exception.AuthenticationException: print(name + '(' + ip + ')' + '身份驗證登入失敗..') device_authentication_failed_list.append(ip) except socket.error: print(name + '(' + ip + ')' + ' 網路無法訪問..') device_not_reachable_list.append(ip) time.sleep(5) print('\n以下裝置身份驗證登入失敗: ') if device_authentication_failed_list == []: print('nothing') else: for i in device_authentication_failed_list: print(i) print('\n網路無法訪問以下裝置:') if device_not_reachable_list == []: print('nothing') else: for i in device_not_reachable_list: print(i) if __name__ == '__main__': main()