Я пишу скрипт для ssh для всех коммутаторов, которые у меня есть, запускаю команду, затем беру выходные данные и отправляю их в текстовый файл.Однако вывод, который я получаю, должен быть отфильтрован до нескольких полезных вещей.Мне нужно только знать интерфейс и VLAN, он включен.Я написал другой скрипт, чтобы взять текстовый файл, созданный первым, который выполняет фильтрацию текста, но этого недостаточно.Я опубликую код для обеих целей, чтобы вы могли понять полный контекст
f = open("vlancheck.txt", "a+")
hostname = "host here"
port = 22
username = getpass.getpass(prompt="Username: ") #used for hiding input
password = getpass.getpass()
command = "show interface status | e disabled"
string = " "
ssh = paramiko.SSHClient() #starts ssh client
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) #generates ssh key for all unknown hosts
ssh.connect(hostname, port=port, username=username, password=password) # logs in with the credentials stored in variables
stdin, stdout, stderr = ssh.exec_command(command) #manages input,output, and error data generated by the command sent
output = stdout.readlines() #reads the output as a list
print("\n".join(output))
f.write(hostname)
f.writelines(output) # writes the output as a list
f.close()
open("truncated.txt" , "w+").writelines([line for line in open("vlancheck.txt") if "Gi" in line])
Я работаю с коммутаторами cisco, и это вывод, который я получаю со своим скриптом фильтра:
Gi1/0/6 connected 708 a-full a-100 10/100/1000BaseTX
Gi1/0/9 connected 708 a-full a-100 10/100/1000BaseTX
Это хорошо, но я хочу сократить его до что-то вроде:
Gi1/0/6 connected 708
Gi1/0/9 connected 708