我正在从vcenter检索数据并打印每个exs主机的值。问题是出于某种原因,我打印了两次某些值。我需要确保只打印一次相同的值:
下面是一个示例结果集:
name => web01 summary.hardware.cpuMhz => 2194 summary.hardware.memorySize => 274707304448 summary.hardware.numCpuCores => 16 summary.host => host-648 summary.quickStats.overallCpuUsage => 3149 summary.quickStats.overallMemoryUsage => 87051
name => web02 summary.hardware.cpuMhz => 2194 summary.hardware.memorySize => 274707304448 summary.hardware.numCpuCores => 16 summary.host => host-658 summary.quickStats.overallCpuUsage => 4909 summary.quickStats.overallMemoryUsage => 144503
name => web03 summary.hardware.cpuMhz => 2194 summary.hardware.memorySize => 274707304448 summary.hardware.numCpuCores => 16 summary.host => host-664 summary.quickStats.overallCpuUsage => 2659 summary.quickStats.overallMemoryUsage => 123063
name => web04 summary.hardware.cpuMhz => 2194 summary.hardware.memorySize => 274707304448 summary.hardware.numCpuCores => 16 summary.host => host-670 summary.quickStats.overallCpuUsage => 1445 summary.quickStats.overallMemoryUsage => 111676
name => web05 summary.hardware.cpuMhz => 2194 summary.hardware.memorySize => 274707304448 summary.hardware.numCpuCores => 16 summary.host => host-856 summary.quickStats.overallCpuUsage => 983 summary.quickStats.overallMemoryUsage => 116179
name => web05 summary.hardware.cpuMhz => 2194 summary.hardware.memorySize => 274707304448 summary.hardware.numCpuCores => 16 summary.host => host-856 summary.quickStats.overallCpuUsage => 983 summary.quickStats.overallMemoryUsage => 116179
name => web06 summary.hardware.cpuMhz => 2194 summary.hardware.memorySize => 274707304448 summary.hardware.numCpuCores => 16 summary.host => host-858 summary.quickStats.overallCpuUsage => 1073 summary.quickStats.overallMemoryUsage => 141572
name => web06 summary.hardware.cpuMhz => 2194 summary.hardware.memorySize => 274707304448 summary.hardware.numCpuCores => 16 summary.host => host-858 summary.quickStats.overallCpuUsage => 1073 summary.quickStats.overallMemoryUsage => 141572
我已将代码更新为:
for item in results:
props = dict((p.Name, p.Val) for p in item.PropSet)
name = props['name']
tt=int(time.time())
Ballooned_Memory = props.get('summary.quickStats.balloonedMemory')
if Ballooned_Memory is not None:
Metric="vSphereGuest.ballooned_memory"
print Metric,tt,Ballooned_Memory,"vSphereGuest="+name.replace('"', ''),"source=vSphereGuest","dc=dc1"
Cpu_Demand = props.get('summary.quickStats.overallCpuDemand')
if Cpu_Demand is not None:
Metric="vSphereGuest.Cpu_Demand"
print Metric,tt,Cpu_Demand,"vSphereGuest="+name.replace('"', ''),"source=vSphereGuest","dc=dc1"
它遍历每个结果集并打印出值。似乎还剩下一个问题。如果结果集包含重复项(它来自这样的源代码),我将打印两次相同的数据集。我如何修改它,使我只打印出一个,而不管有多少相同的结果集来自源代码?你知道吗
尝试使用
set()
来处理您已经打印的内容:基于大量的评论和更新,问题变得更加清晰了。再次更新,获取更多新数据:
原始代码的问题是,您正在进行双重迭代,效果不佳。这将通过创建一个临时字典,其中包含在
item.PropSet
中找到的所有键值组合,稍微清理这个过程。如果item.PropSet
支持索引(item.PropSet['name']
)或获取(item.PropSet.get('name')
),那么创建props
是多余的,可以用item.PropSet
代替props
。如果没有,请保持props
。无论哪种方式,您现在都可以直接访问属性集中的每个键值对。你知道吗道具看起来像这样(对于
'web-03'
):您仍然有一个严重的问题,根据您为
for p in item.PropSet: print p.Name, "=>", p.Val, print "\n"
报告的结果,您要查找的属性键('summary.capacity'
和'summary.freeSpace'
)中的都没有出现在item.PropSet
。你知道吗但是一旦你发现了这一点,你还可以做其他的改进,例如,通过抽象出一些重复的代码。例如:
或者更多的备用:
您似乎在以嵌套方式对
item.PropSet
进行迭代,首先使用r
,然后使用p
。请尝试:相关问题 更多 >
编程相关推荐