使用python从命令行控制VirtualBox

时间:2010-02-22 18:10:15

标签: python virtualbox

我们正在使用python virtualbox API来控制虚拟机。为此,我们使用“pyvb”包(在python API文档中给出)。

al=pyvb.vb.VB()
m=pyvb.vm.vbVM()
al.startVM(m)

我们已经使用python解释器执行了。没有显示错误,但虚拟机没有启动。您能否告诉我们可能出现的问题(所有必要的模块和包已经导入)

2 个答案:

答案 0 :(得分:3)

我发现我可以使用以下功能查找VM是否正在运行,将VM还原到特定快照,以及按名称启动VM。

from subprocess import Popen, PIPE

    def running_vms():
        """
        Return list of running vms
        """
        f = Popen(r'vboxmanage --nologo list runningvms', stdout=PIPE).stdout
        data = [ eachLine.strip() for eachLine in f ]
        return data

    def restore_vm(name='', snapshot=''):
        """
        Restore VM to specific snapshot uuid

        name = VM Name
        snapshot = uuid of snapshot  (uuid can be found in the xml file of your machines folder)
        """
        command = r'vboxmanage --nologo snapshot %s restore %s' % (name,snapshot)
        f = Popen(command, stdout=PIPE).stdout
        data = [ eachLine.strip() for eachLine in f ]
        return data

    def launch_vm(name=''):
        """
        Launch VM

        name = VM Name
        """
        command = r'vboxmanage --nologo startvm %s ' % name
        f = Popen(command, stdout=PIPE).stdout
        data = [ eachLine.strip() for eachLine in f ]
        return data

答案 1 :(得分:0)

引用的代码似乎没有指定要运行的VM。您不应该进行getVM呼叫,然后在startVM呼叫中使用生成的VM实例吗? E.g:

al=pyvb.vb.VB()
m=al.getVM(guid_of_vm)
al.startVM(m)

...将启动使用给定GUID标识的VM(所有VirtualBox VM在创建时都分配了GUID)。您可以从VM的XML文件中获取GUID。如果您需要在运行时发现VM,可以使用方便的listVMS调用:

al=pyvb.vb.VB()
l=al.listVMS()
# choose a VM from the list, assign to 'm'
al.startVM(m)