在代码中加入风扇监控的实现需要借助于设备的命令行输出,并根据输出结果判断风扇是否正常。

首先,在 command.txt 文件中添加获取风扇状态的命令,例如 display device fan state

然后在 Device 类中添加一个方法来解析命令行输出,并判断风扇是否正常:

def check_fan_status(self, output):
    lines = output.split('\n')
    fan_status = {}
    for line in lines:
        if 'Fan' in line:
            fan_name = line.split(':')[0]
            fan_state = line.split(':')[1].strip()
            if 'Normal' not in fan_state:
                fan_status[fan_name] = fan_state
    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_name}: {fan_state}')

这个方法接收一个字符串参数 output,代表命令行输出。它首先将输出按行分割,并遍历每一行,查找包含 Fan 的行。如果找到了,就提取出风扇名称和状态,并将其存储在 fan_status 字典中。最后,如果 fan_status 为空,就说明所有风扇都正常;否则就输出每个故障风扇的状态。

最后,在 Device 类的 open 方法中调用这个方法,即可实现风扇监控的功能:

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) # 等待命令执行完成
    COMMAND = self.cli.recv(65535).decode('utf-8') # 获取输出

    # 输出结果
    print(COMMAND)

    # 检查风扇状态
    self.check_fan_status(COMMAND)

    # 将结果写入文件
    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(COMMAND)

在获取命令行输出后,调用 check_fan_status 方法检查风扇状态,并输出结果。如果所有风扇都正常,就输出 All fans are working normally!。如果有故障风扇,就输出每个故障风扇的状态。

完整代码如下:

from ncclient import manager
import paramiko
import time
import datetime

# 定义设备IP地址、用户名和密码
DEVICE_IP = '10.1.0.6'
USERNAME = 'python'
PASSWORD = 'Huawei@123'


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 check_fan_status(self, output):
        lines = output.split('\n')
        fan_status = {}
        for line in lines:
            if 'Fan' in line:
                fan_name = line.split(':')[0]
                fan_state = line.split(':')[1].strip()
                if 'Normal' not in fan_state:
                    fan_status[fan_name] = fan_state
        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_name}: {fan_state}')

    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) # 等待命令执行完成
        COMMAND = self.cli.recv(65535).decode('utf-8') # 获取输出

        # 输出结果
        print(COMMAND)

        # 检查风扇状态
        self.check_fan_status(COMMAND)

        # 将结果写入文件
        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(COMMAND)

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


if __name__ == '__main__':
    device = Device(DEVICE_IP, USERNAME, PASSWORD)
    device.open()
    device.close()

如果所有风扇都正常,输出如下:

Fan status:
Fan1: Fault
Fan2: Normal

如果所有风扇都正常,输出如下:

All fans are working normally!
``
在下面的代码中加入风扇的监控如果风扇全坏给出提为All fans are faulty!from ncclient import managerimport paramikoimport timeimport datetime# 定义设备IP地址、用户名和密码DEVICE_IP = 10106USERNAME = pythonPASSWORD = Huawei123class Device

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

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