对代码合并优化pythondef check_fan_statusself output lines = outputsplitn fan_status = for line in lines if Fan in line fan_name = linesplit0 fan_state = linesplit1strip
优化建议:
-
可以使用
re模块进行正则表达式匹配,以更简洁地提取风扇名称和状态; -
可以通过
splitlines方法来分割字符串,以更简洁地按行处理字符串; -
可以将检查风扇状态的逻辑提取为一个独立的方法,以增强代码的可读性和复用性。
优化后的代码如下:
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()
``
原文地址: http://www.cveoy.top/t/topic/fbOa 著作权归作者所有。请勿转载和采集!