Управление VirtualBox из командной строки с помощью Python - PullRequest
0 голосов
/ 22 февраля 2010

Мы используем python virtualbox API для управления virtualbox. Для этого мы используем пакет «pyvb» (как указано в документации по Python API).

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

мы выполнили, используя интерпретатор python. Ошибка не отображается, но Virtualbox не запускается. Не могли бы вы рассказать нам, что может быть не так (все необходимые модули и пакеты были импортированы)

Ответы [ 2 ]

3 голосов
/ 22 февраля 2010

Я обнаружил, что могу использовать следующие функции, чтобы определить, работает ли виртуальная машина, восстановить виртуальную машину к определенному снимку и запустить виртуальную машину по имени.

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
0 голосов
/ 22 февраля 2010

Указанный код не указывает, какую виртуальную машину использовать. Разве вы не должны делать вызов getVM, а затем использовать полученный результирующий экземпляр VM в своем вызове startVM? E.g.:

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

... запускает виртуальную машину, идентифицированную с данным GUID (все виртуальные машины VirtualBox имеют GUID, назначенный при их создании). Вы можете получить GUID из XML-файла виртуальной машины. Если вам нужно обнаружить виртуальные машины во время выполнения, есть удобный вызов listVMS:

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