我正在编写用于热测试的代码,该代码需要每 10 秒从以下命令获取信息 racadm getsensorinfo
我想将信息保存为字典,以便每 10 秒将相关信息写入一个 csv 文件。 我尝试了几种方法,但无法达到相关结果
这是我试图制作字典的输出:
Sensor Type : POWER
<Sensor Name> <Status> <Type>
PS1 Status Present AC
PS2 Status Present AC
Sensor Type : TEMPERATURE
<Sensor Name> <Status> <Reading> <lc> <uc> <lnc>[R/W] <unc>[R/W]
[Key = iDRAC.Embedded.1#CPU1Temp]
CPU1 Temp Ok 35C 3C 88C NA [N] NA [N]
[Key = iDRAC.Embedded.1#CPU2Temp]
CPU2 Temp Ok 39C 3C 88C NA [N] NA [N]
[Key = iDRAC.Embedded.1#SystemBoardInletTemp]
System Board Inlet Temp Ok 18C -7C 47C 3C [Y] 43C [Y]
[Key = iDRAC.Embedded.1#SystemBoardExhaustTemp]
System Board Exhaust Temp Ok 29C 3C 80C 8C [N] 75C [N]
Sensor Type : FAN
<Sensor Name> <Status> <Reading> <lc> <uc> <PWM %> <Type>
System Board Fan1A Ok 5640RPM 600RPM NA 25% Standard Performance
System Board Fan1B Ok 5160RPM 600RPM NA 25% Standard Performance
System Board Fan2A Ok 5520RPM 600RPM NA 25% Standard Performance
System Board Fan2B Ok 5280RPM 600RPM NA 25% Standard Performance
System Board Fan3A Ok 5520RPM 600RPM NA 25% Standard Performance
System Board Fan3B Ok 5280RPM 600RPM NA 25% Standard Performance
System Board Fan4A Ok 5520RPM 600RPM NA 25% Standard Performance
System Board Fan4B Ok 5160RPM 600RPM NA 25% Standard Performance
System Board Fan5A Ok 5520RPM 600RPM NA 25% Standard Performance
System Board Fan5B Ok 5160RPM 600RPM NA 25% Standard Performance
System Board Fan6A Ok 5520RPM 600RPM NA 25% Standard Performance
System Board Fan6B Ok 5280RPM 600RPM NA 25% Standard Performance
System Board Fan7A Ok 5640RPM 600RPM NA 25% Standard Performance
System Board Fan7B Ok 5160RPM 600RPM NA 25% Standard Performance
System Board Fan8A Ok 5520RPM 600RPM NA 25% Standard Performance
System Board Fan8B Ok 5280RPM 600RPM NA 25% Standard Performance
Sensor Type : VOLTAGE
<Sensor Name> <Status> <Reading> <lc> <uc>
System Board DIMM PG Ok Good NA NA
System Board NDC PG Ok Good NA NA
System Board PS1 PG FAIL Ok Good NA NA
System Board PS2 PG FAIL Ok Good NA NA
System Board BP0 PG Ok Good NA NA
System Board BP1 PG Ok Good NA NA
System Board 1.8V SW PG Ok Good NA NA
System Board 2.5V SW PG Ok Good NA NA
System Board 5V SW PG Ok Good NA NA
System Board PVNN SW PG Ok Good NA NA
System Board VSB11 SW PG Ok Good NA NA
System Board VSBM SW PG Ok Good NA NA
System Board 3.3V B PG Ok Good NA NA
CPU1 MEM012 VDDQ PG Ok Good NA NA
CPU1 MEM012 VPP PG Ok Good NA NA
CPU1 MEM012 VTT PG Ok Good NA NA
CPU1 MEM345 VDDQ PG Ok Good NA NA
CPU1 MEM345 VPP PG Ok Good NA NA
CPU1 MEM345 VTT PG Ok Good NA NA
CPU1 VCCIO PG Ok Good NA NA
CPU1 VCORE PG Ok Good NA NA
CPU1 FIVR PG Ok Good NA NA
CPU2 MEM012 VDDQ PG Ok Good NA NA
CPU2 MEM012 VPP PG Ok Good NA NA
CPU2 MEM012 VTT PG Ok Good NA NA
CPU2 MEM345 VDDQ PG Ok Good NA NA
CPU2 MEM345 VPP PG Ok Good NA NA
CPU2 MEM345 VTT PG Ok Good NA NA
CPU2 VCCIO PG Ok Good NA NA
CPU2 VCORE PG Ok Good NA NA
CPU2 FIVR PG Ok Good NA NA
PS1 Voltage 1 Ok 232.00V NA NA
PS2 Voltage 2 Ok 230.00V NA NA
System Board 3.3V A PG Ok Good NA NA
CPU1 VSA PG Ok Good NA NA
CPU2 VSA PG Ok Good NA NA
System Board BP2 PG Ok Good NA NA
Sensor Type : CURRENT
<Sensor Name> <Status> <Reading> <lc> <uc> <lnc>[R/W] <unc>[R/W]
[Key = iDRAC.Embedded.1#PS1Current1]
PS1 Current 1 Ok 0.4Amps NA NA 0Amps [N] 0Amps [N]
[Key = iDRAC.Embedded.1#PS2Current2]
PS2 Current 2 Ok 0.4Amps NA NA 0Amps [N] 0Amps [N]
[Key = iDRAC.Embedded.1#SystemBoardPwrConsumption]
System Board Pwr Consumption Ok 130Watts NA 1794Watts 0Watts [N] 1638Watts [Y]
Sensor Type : PROCESSOR
<Sensor Name> <Status> <State> <lc> <uc>
CPU1 Status Ok Presence_Detected NA NA
CPU2 Status Ok Presence_Detected NA NA
Sensor Type : MEMORY
<Sensor Name> <Status> <State> <lc> <uc>
DIMM A1 Ok Presence_Detected NA NA
DIMM A2 N/A Absent NA NA
DIMM A3 N/A Absent NA NA
DIMM A4 N/A Absent NA NA
DIMM A5 N/A Absent NA NA
DIMM A6 N/A Absent NA NA
DIMM A7 N/A Absent NA NA
DIMM A8 N/A Absent NA NA
DIMM A9 N/A Absent NA NA
DIMM A10 N/A Absent NA NA
DIMM A11 N/A Absent NA NA
DIMM A12 N/A Absent NA NA
DIMM B1 Ok Presence_Detected NA NA
DIMM B2 N/A Absent NA NA
DIMM B3 N/A Absent NA NA
DIMM B4 N/A Absent NA NA
DIMM B5 N/A Absent NA NA
DIMM B6 N/A Absent NA NA
DIMM B7 N/A Absent NA NA
DIMM B8 N/A Absent NA NA
DIMM B9 N/A Absent NA NA
DIMM B10 N/A Absent NA NA
DIMM B11 N/A Absent NA NA
DIMM B12 N/A Absent NA NA
Sensor Type : BATTERY
<Sensor Name> <Status> <Reading> <lc> <uc>
System Board CMOS Battery Ok Present NA NA
Sensor Type : PERFORMANCE
<Sensor Name> <Status> <State> <lc> <uc>
System Board Power Optimized Ok Not Degraded NA NA
Sensor Type : INTRUSION
<Sensor Name> <Intrusion> <Status>
System Board Intrusion Closed Power ON
Sensor Type : REDUNDANCY
<Sensor Name> <Status> <Type>
System Board Fan Redundancy Full Redundant Fan
Sensor Type : SYSTEM PERFORMANCE
<Sensor Name> <Status> <Reading> <lc> <uc> <lnc>[R/W] <unc>[R/W]
[Key = iDRAC.Embedded.1#SystemBoardIOUsage]
System Board IO Usage Ok 0% NA NA NA [N] 101% [Y]
[Key = iDRAC.Embedded.1#SystemBoardMEMUsage]
System Board MEM Usage Ok 0% NA NA NA [N] 101% [Y]
[Key = iDRAC.Embedded.1#SystemBoardSYSUsage]
System Board SYS Usage Ok 0% NA NA NA [N] 101% [Y]
[Key = iDRAC.Embedded.1#SystemBoardCPUUsage]
System Board CPU Usage Ok 0% NA NA NA [N] 101% [Y]
Sensor Type : REMOVABLE MEDIA
<Sensor Name> <Status>
VFLASH SD Absent
这就是我想要的:
result = {"CPU1":"35C", "CPU2":"39C", "System Board Inlet Temp":"18C", "System Board Exhaust Temp":"29C"}
相反,我得到:
result = {'CPU1 Temp Ok 44C 3C 88C NA [N] NA [N], Temp Ok 44C 3C 88C NA [N] NA [N]': 'CPU1', 'CPU2 Temp Ok 47C 3C 88C NA [N] NA [N], Temp Ok 47C 3C 88C NA [N] NA [N]': 'CPU2', 'System Board Inlet Temp Ok 27C -7C 47C 3C [Y] 43C [Y], Board Inlet Temp Ok 27C -7C 47C 3C [Y] 43C [Y]': 'System', 'System Board Exhaust Temp Ok 38C 3C 80C 8C [N] 75C [N], Board Exhaust Temp Ok 38C 3C 80C 8C [N] 75C [N]': 'System'}
这是我的代码:
def get_servers_temps():
"Return A dict mapping from sensor name to sensor value"
cmd = "racadm getsensorinfo"
raw_data = os.popen(cmd).readlines()
result = {}
for line in raw_data:
fields = line.split('| ')
if " Temp" in fields[-1]:
k1 = fields[0].strip()
vfields = fields[-1].strip().split()
value = vfields[0]
k2 = ' '.join(vfields[1:])
key = k1 + ", " + k2
result[key]=value
return result
我真的很感激任何帮助
答案 0 :(得分:1)
您可以使用 re
模块来解析字符串 (regex101):
import re
txt = """
Sensor Type : TEMPERATURE
<Sensor Name> <Status> <Reading> <lc> <uc> <lnc>[R/W] <unc>[R/W]
[Key = iDRAC.Embedded.1#CPU1Temp]
CPU1 Temp Ok 35C 3C 88C NA [N] NA [N]
[Key = iDRAC.Embedded.1#CPU2Temp]
CPU2 Temp Ok 39C 3C 88C NA [N] NA [N]
[Key = iDRAC.Embedded.1#SystemBoardInletTemp]
System Board Inlet Temp Ok 18C -7C 47C 3C [Y] 43C [Y]
[Key = iDRAC.Embedded.1#SystemBoardExhaustTemp]
System Board Exhaust Temp Ok 29C 3C 80C 8C [N] 75C [N]
"""
result = dict(re.findall(r"^(.*?)\s{2,}.*?(\d+C)", txt, flags=re.M))
print(result)
打印:
{'CPU1 Temp': '35C', 'CPU2 Temp': '39C', 'System Board Inlet Temp': '18C', 'System Board Exhaust Temp': '29C'}
编辑:
import re
txt = """
Sensor Type : POWER
<Sensor Name> <Status> <Type>
PS1 Status Present AC
PS2 Status Present AC
Sensor Type : TEMPERATURE
<Sensor Name> <Status> <Reading> <lc> <uc> <lnc>[R/W] <unc>[R/W]
[Key = iDRAC.Embedded.1#CPU1Temp]
CPU1 Temp Ok 35C 3C 88C NA [N] NA [N]
[Key = iDRAC.Embedded.1#CPU2Temp]
CPU2 Temp Ok 39C 3C 88C NA [N] NA [N]
[Key = iDRAC.Embedded.1#SystemBoardInletTemp]
System Board Inlet Temp Ok 18C -7C 47C 3C [Y] 43C [Y]
[Key = iDRAC.Embedded.1#SystemBoardExhaustTemp]
System Board Exhaust Temp Ok 29C 3C 80C 8C [N] 75C [N]
Sensor Type : FAN
<Sensor Name> <Status> <Reading> <lc> <uc> <PWM %> <Type>
System Board Fan1A Ok 5640RPM 600RPM NA 25% Standard Performance
System Board Fan1B Ok 5160RPM 600RPM NA 25% Standard Performance
System Board Fan2A Ok 5520RPM 600RPM NA 25% Standard Performance
System Board Fan2B Ok 5280RPM 600RPM NA 25% Standard Performance
System Board Fan3A Ok 5520RPM 600RPM NA 25% Standard Performance
System Board Fan3B Ok 5280RPM 600RPM NA 25% Standard Performance
System Board Fan4A Ok 5520RPM 600RPM NA 25% Standard Performance
System Board Fan4B Ok 5160RPM 600RPM NA 25% Standard Performance
System Board Fan5A Ok 5520RPM 600RPM NA 25% Standard Performance
System Board Fan5B Ok 5160RPM 600RPM NA 25% Standard Performance
System Board Fan6A Ok 5520RPM 600RPM NA 25% Standard Performance
System Board Fan6B Ok 5280RPM 600RPM NA 25% Standard Performance
System Board Fan7A Ok 5640RPM 600RPM NA 25% Standard Performance
System Board Fan7B Ok 5160RPM 600RPM NA 25% Standard Performance
System Board Fan8A Ok 5520RPM 600RPM NA 25% Standard Performance
System Board Fan8B Ok 5280RPM 600RPM NA 25% Standard Performance
Sensor Type : VOLTAGE
<Sensor Name> <Status> <Reading> <lc> <uc>
System Board DIMM PG Ok Good NA NA
System Board NDC PG Ok Good NA NA
System Board PS1 PG FAIL Ok Good NA NA
System Board PS2 PG FAIL Ok Good NA NA
System Board BP0 PG Ok Good NA NA
System Board BP1 PG Ok Good NA NA
System Board 1.8V SW PG Ok Good NA NA
System Board 2.5V SW PG Ok Good NA NA
System Board 5V SW PG Ok Good NA NA
System Board PVNN SW PG Ok Good NA NA
System Board VSB11 SW PG Ok Good NA NA
System Board VSBM SW PG Ok Good NA NA
System Board 3.3V B PG Ok Good NA NA
CPU1 MEM012 VDDQ PG Ok Good NA NA
CPU1 MEM012 VPP PG Ok Good NA NA
CPU1 MEM012 VTT PG Ok Good NA NA
CPU1 MEM345 VDDQ PG Ok Good NA NA
CPU1 MEM345 VPP PG Ok Good NA NA
CPU1 MEM345 VTT PG Ok Good NA NA
CPU1 VCCIO PG Ok Good NA NA
CPU1 VCORE PG Ok Good NA NA
CPU1 FIVR PG Ok Good NA NA
CPU2 MEM012 VDDQ PG Ok Good NA NA
CPU2 MEM012 VPP PG Ok Good NA NA
CPU2 MEM012 VTT PG Ok Good NA NA
CPU2 MEM345 VDDQ PG Ok Good NA NA
CPU2 MEM345 VPP PG Ok Good NA NA
CPU2 MEM345 VTT PG Ok Good NA NA
CPU2 VCCIO PG Ok Good NA NA
CPU2 VCORE PG Ok Good NA NA
CPU2 FIVR PG Ok Good NA NA
PS1 Voltage 1 Ok 232.00V NA NA
PS2 Voltage 2 Ok 230.00V NA NA
System Board 3.3V A PG Ok Good NA NA
CPU1 VSA PG Ok Good NA NA
CPU2 VSA PG Ok Good NA NA
System Board BP2 PG Ok Good NA NA
Sensor Type : CURRENT
<Sensor Name> <Status> <Reading> <lc> <uc> <lnc>[R/W] <unc>[R/W]
[Key = iDRAC.Embedded.1#PS1Current1]
PS1 Current 1 Ok 0.4Amps NA NA 0Amps [N] 0Amps [N]
[Key = iDRAC.Embedded.1#PS2Current2]
PS2 Current 2 Ok 0.4Amps NA NA 0Amps [N] 0Amps [N]
[Key = iDRAC.Embedded.1#SystemBoardPwrConsumption]
System Board Pwr Consumption Ok 130Watts NA 1794Watts 0Watts [N] 1638Watts [Y]
Sensor Type : PROCESSOR
<Sensor Name> <Status> <State> <lc> <uc>
CPU1 Status Ok Presence_Detected NA NA
CPU2 Status Ok Presence_Detected NA NA
Sensor Type : MEMORY
<Sensor Name> <Status> <State> <lc> <uc>
DIMM A1 Ok Presence_Detected NA NA
DIMM A2 N/A Absent NA NA
DIMM A3 N/A Absent NA NA
DIMM A4 N/A Absent NA NA
DIMM A5 N/A Absent NA NA
DIMM A6 N/A Absent NA NA
DIMM A7 N/A Absent NA NA
DIMM A8 N/A Absent NA NA
DIMM A9 N/A Absent NA NA
DIMM A10 N/A Absent NA NA
DIMM A11 N/A Absent NA NA
DIMM A12 N/A Absent NA NA
DIMM B1 Ok Presence_Detected NA NA
DIMM B2 N/A Absent NA NA
DIMM B3 N/A Absent NA NA
DIMM B4 N/A Absent NA NA
DIMM B5 N/A Absent NA NA
DIMM B6 N/A Absent NA NA
DIMM B7 N/A Absent NA NA
DIMM B8 N/A Absent NA NA
DIMM B9 N/A Absent NA NA
DIMM B10 N/A Absent NA NA
DIMM B11 N/A Absent NA NA
DIMM B12 N/A Absent NA NA
Sensor Type : BATTERY
<Sensor Name> <Status> <Reading> <lc> <uc>
System Board CMOS Battery Ok Present NA NA
Sensor Type : PERFORMANCE
<Sensor Name> <Status> <State> <lc> <uc>
System Board Power Optimized Ok Not Degraded NA NA
Sensor Type : INTRUSION
<Sensor Name> <Intrusion> <Status>
System Board Intrusion Closed Power ON
Sensor Type : REDUNDANCY
<Sensor Name> <Status> <Type>
System Board Fan Redundancy Full Redundant Fan
Sensor Type : SYSTEM PERFORMANCE
<Sensor Name> <Status> <Reading> <lc> <uc> <lnc>[R/W] <unc>[R/W]
[Key = iDRAC.Embedded.1#SystemBoardIOUsage]
System Board IO Usage Ok 0% NA NA NA [N] 101% [Y]
[Key = iDRAC.Embedded.1#SystemBoardMEMUsage]
System Board MEM Usage Ok 0% NA NA NA [N] 101% [Y]
[Key = iDRAC.Embedded.1#SystemBoardSYSUsage]
System Board SYS Usage Ok 0% NA NA NA [N] 101% [Y]
[Key = iDRAC.Embedded.1#SystemBoardCPUUsage]
System Board CPU Usage Ok 0% NA NA NA [N] 101% [Y]
Sensor Type : REMOVABLE MEDIA
<Sensor Name> <Status>
VFLASH SD Absent """
result = dict(re.findall(r"^(.*?) {2,}.*?(\d+C)", txt, flags=re.M))
print(result)
打印:
{'CPU1 Temp': '35C', 'CPU2 Temp': '39C', 'System Board Inlet Temp': '18C', 'System Board Exhaust Temp': '29C'}