我在使用jython时遇到了一个问题。 当我使用jython/python脚本访问MBean时,我得到了打印的值,但是我想解析结果,以便能够提取出需要的内容。在
下面是代码和输出:
def get_attribute(mbean,attribute):
#<domain>:type=<type>
obn = javax.management.ObjectName(mbean)
#<attribute> ie: HeapMemoryUsage
return remote.getAttribute(obn, attribute)
print get_attribute("java.lang:type=Memory","HeapMemoryUsage")
文本输出为:
在javax.management.openmbean.CompositeDataSupport(复合类型=javax.management.openmbean.CompositeType(名称=java.lang.management管理.MemoryUsage,items=((itemName=committed,itemType)=javax.management.openmbean.SimpleType(名称=java.lang.Long文件)),(项目名称=初始化,项目类型=javax.management.openmbean.SimpleType(名称=java.lang.Long文件)),(项目名称=最大值,项目类型=javax.management.openmbean.SimpleType(名称=java.lang.Long文件)),(项目名称=已使用,项目类型=javax.management.openmbean.SimpleType(名称=java.lang.Long文件)))),contents={committed=61276160,init=63313088,max=129761280,used=30232944})
如果有人能给我一些例子或想法那就太好了。在
非常感谢。在
例如,对于Jython,如果您想获取有关一个MBean的信息,那么可以很容易地调用:
^{pr2}$但是,输出是这样的:
javax.management.MBeanInfo[description=Information on the management interface of the MBean, attributes=[javax.management.MBeanAttributeInfo[description=Verbose, name=Verbose, type=boolean, read/write, isIs, descriptor={openType=javax.management.openmbean.SimpleType(name=java.lang.Boolean), originalType=boolean}], javax.management.openmbean.OpenMBeanAttributeInfoSupport(name=HeapMemoryUsage,openType=javax.management.openmbean.CompositeType(name=java.lang.management.MemoryUsage,items=((itemName=committed,itemType=javax.management.openmbean.SimpleType(name=java.lang.Long)),(itemName=init,itemType=javax.management.openmbean.SimpleType(name=java.lang.Long)),(itemName=max,itemType=javax.management.openmbean.SimpleType(name=java.lang.Long)),(itemName=used,itemType=javax.management.openmbean.SimpleType(name=java.lang.Long)))),default=null,minValue=null,maxValue=null,legalValues=null,descriptor={openType=javax.management.openmbean.CompositeType(name=java.lang.management.MemoryUsage,items=((itemName=committed,itemType=javax.management.openmbean.SimpleType(name=java.lang.Long)),(itemName=init,itemType=javax.management.openmbean.SimpleType(name=java.lang.Long)),(itemName=max,itemType=javax.management.openmbean.SimpleType(name=java.lang.Long)),(itemName=used,itemType=javax.management.openmbean.SimpleType(name=java.lang.Long)))), originalType=java.lang.management.MemoryUsage}), javax.management.MBeanAttributeInfo[description=ObjectPendingFinalizationCount, name=ObjectPendingFinalizationCount, type=int, read-only, descriptor={openType=javax.management.openmbean.SimpleType(name=java.lang.Integer), originalType=int}], javax.management.openmbean.OpenMBeanAttributeInfoSupport(name=NonHeapMemoryUsage,openType=javax.management.openmbean.CompositeType(name=java.lang.management.MemoryUsage,items=((itemName=committed,itemType=javax.management.openmbean.SimpleType(name=java.lang.Long)),(itemName=init,itemType=javax.management.openmbean.SimpleType(name=java.lang.Long)),(itemName=max,itemType=javax.management.openmbean.SimpleType(name=java.lang.Long)),(itemName=used,itemType=javax.management.openmbean.SimpleType(name=java.lang.Long)))),default=null,minValue=null,maxValue=null,legalValues=null,descriptor={openType=javax.management.openmbean.CompositeType(name=java.lang.management.MemoryUsage,items=((itemName=committed,itemType=javax.management.openmbean.SimpleType(name=java.lang.Long)),(itemName=init,itemType=javax.management.openmbean.SimpleType(name=java.lang.Long)),(itemName=max,itemType=javax.management.openmbean.SimpleType(name=java.lang.Long)),(itemName=used,itemType=javax.management.openmbean.SimpleType(name=java.lang.Long)))), originalType=java.lang.management.MemoryUsage}), javax.management.openmbean.OpenMBeanAttributeInfoSupport(name=ObjectName,openType=javax.management.openmbean.SimpleType(name=javax.management.ObjectName),default=null,minValue=null,maxValue=null,legalValues=null,descriptor={openType=javax.management.openmbean.SimpleType(name=javax.management.ObjectName), originalType=javax.management.ObjectName})], constructors=[], operations=[javax.management.MBeanOperationInfo[description=gc, name=gc, returnType=void, signature=[], impact=unknown, descriptor={openType=javax.management.openmbean.SimpleType(name=java.lang.Void), originalType=void}]], notifications=[javax.management.MBeanNotificationInfo[description=Memory Notification, name=javax.management.Notification, notifTypes=[java.management.memory.threshold.exceeded, java.management.memory.collection.threshold.exceeded], descriptor={}]], descriptor={immutableInfo=true, interfaceClassName=java.lang.management.MemoryMXBean, mxbean=true}]
所以,如果有人知道一个很好的方法来将这些输出解析成某个对象,为了得到一个漂亮的显示,请给出评论。在
非常感谢。在
我自己找到了答案。在
其思想是将结果保存为一个对象。然后对该对象调用方法
get("")
,即obj.get("committed")
。 实际上,当调用"print obj"
时,我得到了与上面相同的结果,因为我相信python
调用了该对象的toString()
方法。在我发布了一个示例代码,希望它能对某些人有所帮助。在
相关问题 更多 >
编程相关推荐