2011-02-13 17 views
7

मैं कंप्यूटर पर चल रहे वीएमएस की सूची प्रदर्शित करने के लिए वर्श सूची का उपयोग कर रहा हूं। मैं प्रक्रिया में 2 डी सरणी के रूप में मुद्रित जानकारी चाहता हूँ।वर्श (libvirt) के लिए वैकल्पिक

इस बारे में जाने का एक तरीका है आउटपुट, टोकननाइज़र का उपयोग करना और सरणी में इसे स्टोर करना। लेकिन क्या कोई और तरीका है जहां मैं सीधे इसे सरणी या किसी रूप के रूप में प्राप्त कर सकता हूं ताकि कोड अधिक स्केलेबल हो। (कुछ जो मैं सोच सकता था वह पाइथन में libvirt एपीआई का उपयोग कर रहा था)

उत्तर

13

वास्तव में libvirt Python API bindings हैं।

import libvirt 

conn = libvirt.openReadOnly(None) # $LIBVIRT_DEFAULT_URI, or give a URI here 
assert conn, 'Failed to open connection' 

names = conn.listDefinedDomains() 
domains = map(conn.lookupByName, names) 

ids = conn.listDomainsID() 
running = map(conn.lookupByID, ids) 

columns = 3 

states = { 
    libvirt.VIR_DOMAIN_NOSTATE: 'no state', 
    libvirt.VIR_DOMAIN_RUNNING: 'running', 
    libvirt.VIR_DOMAIN_BLOCKED: 'blocked on resource', 
    libvirt.VIR_DOMAIN_PAUSED: 'paused by user', 
    libvirt.VIR_DOMAIN_SHUTDOWN: 'being shut down', 
    libvirt.VIR_DOMAIN_SHUTOFF: 'shut off', 
    libvirt.VIR_DOMAIN_CRASHED: 'crashed', 
} 
def info(dom): 
    [state, maxmem, mem, ncpu, cputime] = dom.info() 
    return '%s is %s,' % (dom.name(), states.get(state, state)) 

print 'Defined domains:' 
for row in map(None, *[iter(domains)] * columns): 
    for domain in row: 
     if domain: 
      print info(domain), 
    print 
print 

print 'Running domains:' 
for row in map(None, *[iter(running)] * columns): 
    for domain in row: 
     if domain: 
      print info(domain), 
    print 
संबंधित मुद्दे