virsh的替代品(libvirt)

2024-05-17 05:27:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用virsh list来显示计算机上运行的vm的列表。我想把这个过程中的信息以二维数组的形式打印出来。

一种方法是获得输出,使用标记器并将其存储在数组中。但是,有没有其他方法可以直接将其转换成数组或其他形式,从而使代码更具可伸缩性。(我可以想到的是在python中使用libvirt api)


Tags: 方法代码标记api信息列表过程计算机
1条回答
网友
1楼 · 发布于 2024-05-17 05:27:51

确实有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

相关问题 更多 >