优化建议:

  1. 可以使用 re 模块进行正则表达式匹配,以更简洁地提取风扇名称和状态;

  2. 可以通过 splitlines 方法来分割字符串,以更简洁地按行处理字符串;

  3. 可以将检查风扇状态的逻辑提取为一个独立的方法,以增强代码的可读性和复用性。

优化后的代码如下:

import re

def extract_fan_status(output):
    fan_status = {}
    for line in output.splitlines():
        match = re.search(r'Fan(\d+):\s*(\w+)', line)
        if match:
            fan_name = match.group(1)
            fan_state = match.group(2)
            if fan_state != 'Normal':
                fan_status[fan_name] = fan_state
    return fan_status

def check_fan_status(output):
    fan_status = extract_fan_status(output)
    if not fan_status:
        print('All fans are working normally!')
    else:
        print('Fan status:')
        for fan_name, fan_state in fan_status.items():
            print(f'Fan{fan_name}: {fan_state}')

class Device():
    def __init__(self, ip, usr, pwd):
        self.hostname = ip
        self.username = usr
        self.password = pwd
        self.client = self._get_connect()
        self.cli = self.client.invoke_shell()
        self.cli.send('n\n')
        self.cli.send('screen-length 0 temporary\n')

    def _get_connect(self):
        ssh_con = paramiko.SSHClient()
        ssh_con.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        ssh_con.connect(hostname=self.hostname, username=self.username, password=self.password,timeout=10)
        return ssh_con

    def open(self):
        with open('command.txt', 'r') as f:
            cmd_list = f.readlines()
            for cmd in cmd_list:
                self.cli.send(cmd)
        time.sleep(1) # 等待命令执行完成
        output = self.cli.recv(65535).decode('utf-8') # 获取输出

        # 输出结果
        print(output)

        # 检查风扇状态
        check_fan_status(output)

        # 将结果写入文件
        timestamp = datetime.datetime.now().strftime('%Y-%m-%d_%H-%M-%S')
        filename = f'{DEVICE_IP}_{timestamp}.txt'
        with open(filename, 'w') as f:
            f.write(output)

    def close(self):
        self.client.close()

if __name__ == '__main__':
    device = Device(DEVICE_IP, USERNAME, PASSWORD)
    device.open()
    device.close()
``
对代码合并优化pythondef check_fan_statusself output lines = outputsplitn fan_status = for line in lines if Fan in line fan_name = linesplit0 fan_state = linesplit1strip

原文地址: http://www.cveoy.top/t/topic/fbOa 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录