我有一个文件,在本例中叫做alarm.file。下面的代码遍历文件的每一行,如果包含" Blade_HostName"它将它添加到列表中并将该行的剥离版本分配给变量,然后检查"节点:"在文件中,将Blade_HostName作为键添加到字典中,并添加"节点:"作为关键的价值。
我坚持下一步。我希望它通过字典并返回共享相同值的所有键。我可以从那里处理它。
从返回的键列表中,我将使用子进程ssh到该值,对具有该值的所有键运行命令,然后对具有其他唯一值的每个键执行相同操作(如注释中所示)底部的代码。)
提前致谢。
警报文件示例,以备不时之需:
警报类型:存储重启警报
节点:10.xx.xx.2
主机名:
摘要:E CM_HELLO 7213存储10.xx.xx.1重新启动
BladeIP_Storage_Was_restarted = 10.xx.xx.1
Blade_HostName = r33b26
Xcat_Info = njxcat01
地区=新泽西州
已确认:0
首次发生:02/24/2016 09:49:32 EST
LastOcurrence:02/24/2016 09:49:32 EST
发生次数= 1
-------------------
报警类型:存储重启警报
节点:10.xx.xx.2
主机名:
摘要:E CM_HELLO 7213存储10.xx.xx.2已重新启动
BladeIP_Storage_Was_restarted = 10.xx.xx.2
Blade_HostName = r39b14
Xcat_Info = njxcat01
地区=新泽西州
已确认:0
首次发生:02/24/2016 09:49:40 EST
LastOcurrence:02/24/2016 09:49:40 EST
发生次数= 1
-------------------
报警类型:存储重启警报
节点:10.xx.xx.3
主机名:
摘要:E CM_HELLO 7213存储10.xx.xx.3重新启动
BladeIP_Storage_Was_restarted = 10.xx.xx.3
Blade_HostName = r54b05
Xcat_Info = njxcat01
地区=新泽西州
已确认:0
首次发生:02/24/2016 09:49:43 EST
LastOcurrence:02/24/2016 09:49:43 EST
发生次数= 1
-------------------
#!/usr/bin/python3
import os, sys, subprocess
myRackDict = {}
myRack = ""
myListX = []
myBladeList = []
if len(sys.argv) <= 1:
print('Not a valid file, please try again')
sys.exit()
elif len(sys.argv) > 1:
myFile = sys.argv[1]
if myFile == '':
sys.exit()
with open(myFile, 'r') as f:
for line in f:
if 'Blade_HostName' in line:
line = line.replace('Blade_HostName = ', '')
line = line.rstrip('\n')
line = line.lstrip()
#print(line)
myRack = line
#myBladeList.append(myRack)
elif 'Node: ' in line:
line = line.rstrip('\n')
line = line.lstrip(' ')
line = line.replace('Node: ', '')
if not myRack in myRackDict.keys():
myRackDict[myRack] = line
else:
continue
print(myRackDict)
#myString = ('for i in ' + ' '.join(myBladeList) + ' ;do echo $i; psh $i monit summary; done')
#print(myString)
"""
mySsh = subprocess.check_output("ssh " + "root@" + myxCat['hixxcat'] + " 'psh r1046b01 monit summary'", shell=True)
encoded = mySsh.decode()
print(encoded)
"""
答案 0 :(得分:2)
您可以使用defaultdict
轻松完成,以便每个值都与一个键列表相关联。
import collections
val_map = collections.defaultdict(list)
for k,v in myRackDict.items():
val_map[v].append(k)
答案 1 :(得分:1)
循环遍历dict
:
d = {"foo": 1, "bar": 2, "baz": 1}
keys_for_1 = [k for k in d if d[k] == 1]
print(keys_for_1)
输出:
['foo', 'baz']