循环以删除不需要的输出行

2024-05-01 21:14:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个工作脚本,它使用Paramiko从网络交换机获取一些数据。脚本的第二部分读取包含输出的文件,过滤不需要的行,然后创建一个新文件。我想做的是,如果可能的话,过滤脚本第一部分中不需要的行。我还想删除空白行。我尝试在列表中使用“\t”“\r”和“\n”来删除,但是这些并没有去掉空行。你知道吗

#!/usr/bin/env python3
###########################################
# THIS SCRIPT CHECKS THE SFP MODULE TYPE  #
# IN EACH SFP PORT ON AN ADVANTECH SWITCH # 
###########################################
#
import paramiko
import sys, time
import re

username = 'user'
password = 'pass'


with open('Test_IPs', 'r') as host_list:
    for i in host_list:
        str(i)
        try:
            ssh_client = paramiko.SSHClient()
                ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
            ssh_client.connect(i, username=username, password=password)
            command = ssh_client.invoke_shell()    
            time.sleep(1)
            command.send("show info \n")
            time.sleep(1)
            command.send("show dmi gi 9 info \n")
            time.sleep(1)
            command.send("\n")
            command.send("show dmi gi 10 info \n")
            time.sleep(1)
            command.send("\n")
            command.send("show dmi gi 11 info \n")
            time.sleep(1)
            command.send("\n")
            command.send("show dmi gi 12 info \n")
            time.sleep(1)
            command.send("\n")
            command.send("show lldp ne \n")
            time.sleep(1)
            command.send("exit \n")
            command.send("exit \n")
            time.sleep(1)
            output = command.recv(5000)
#OPEN THE FILE WHERE WE WANT TO SAVE THE OUTPUT
            SFPDATA = open("SFP-Info.txt","a+")
#WRITE THE OUTPUT TO THE FILE AND NEWLINE. SINCE USING THE VARIABLE
#OF 'i' WE STRIP THE NEWLINE THAT WOULD FOLLOW THE VARIABLE.
            SFPDATA.write("SFP CHECK FOR {} STARTING \n".format(i.strip()))
#USE DECODE TO SHOW THE ACTUAL STRINGS INSTEAD OF BITS
#HERE IS WHERE I WANT TO FILTER THE UNWANTED LINES OF OUTPUT
            SFPDATA.write(output.decode())
            SFPDATA.write("SFP CHECK FOR {} COMPLETE \n".format(i.strip()))
            SFPDATA.write("\n")
            SFPDATA.write("--------------------------------------------------------")
            SFPDATA.write("\n")
            SFPDATA.write("\n")
#CLOSE THE FILE AFTER THE DATA HAS BEEN WRITTEN
            SFPDATA.close()
            ssh_client.close
            print("SFP CHECK FOR {} COMPLETE".format(i.strip()))
        except paramiko.ssh_exception.NoValidConnectionsError as e:
            pass
            print(i, "No Valid Connections")
        except paramiko.ssh_exception.AuthenticationException as ea:
            print(i, "Authentication Failed")
        except paramiko.ssh_exception.BadHostKeyException as eb:
            print(i, "Bad Host Key")
        except Exception as ex:
            print("SFP CHECK FAILED FOR {}".format(i.strip()))

#REMOVE UNWANTED LINES
SFPDATA = open("SFP-Info.txt","r")
SFPDATACLEAN = open("SFP-Info-Clean.txt", "w+")
removelines = ("DateCode", "VendorSn", "VendorRev", "SFP Serial Info", 
"switch", "Loader", "Firmware", "Build", "System O", "show", "exit",
"System U", "System C", "Model", "connector", "MAC", "Subnet")

SFPDATACLEAN.write(SFPDATA.readline())
for line in SFPDATA:
    if not line.lstrip().startswith(removelines):
        SFPDATACLEAN.write(line)

print("All done.")

Tags: theinfoclientsendparamikotimeasshow