VirtualBox & Python
Всем доброго времени суток!
Перерыл весь интернет и доку по VirtualBox'у, но так и не нашёл толкового ответа на мой вопрос. Очень надеюсь, что кто-то сможет мне здесь помочь с ответом.
И так. Есть скрипт на Python, который использует библиотеку поставляющуюся с самим VirtualBox'ом. Скрипт должен делать 3-и вещи:
В коде используется таймаут, без которого регулярно возникает искслючение "The given session is busy". Правда, порой и этого таймаута мало. Собственно вопрос такой: как сделать так, что бы работало стабильно и без всяких таймаутов. Сразу отмечу, делал опрос состояния сессии в цикле, но это не работает. Более мнее надёжно работает только код с таймаутом, но мне кажется, есть более достойное решение.
P.S.: использую VirtualBox версии 4.1.12_Ubuntu r77245
Перерыл весь интернет и доку по VirtualBox'у, но так и не нашёл толкового ответа на мой вопрос. Очень надеюсь, что кто-то сможет мне здесь помочь с ответом.
И так. Есть скрипт на Python, который использует библиотеку поставляющуюся с самим VirtualBox'ом. Скрипт должен делать 3-и вещи:
- остановить виртуальную машину;
- восстановить нужный образ;
- запустить виртуальную машину.
#!/usr/bin/env python
from vboxapi import VirtualBoxManager
import time
UUID = '7efbec16-c985-4fef-b771-24b8611f544e'
SUUID = '071dfa5b-dbfd-4e16-846e-287f2fe7218e'
vboxmgr = VirtualBoxManager(None, None)
vbox = vboxmgr.vbox
mgr = vboxmgr.mgr
session = mgr.getSessionObject(vbox)
machine = vbox.findMachine(UUID)
#stop virtual machine;
machine.lockMachine(session, 1)
progress = session.console.powerDown()
while not progress.completed:
progress.waitForCompletion(1000)
time.sleep(10) # if comment this line, script will raise the xpcom.Exception: 0x80bb0007 (The given session is busy)
#restore needed snapshot
machine.lockMachine(session, 1)
snapshot = machine.findSnapshot(SUUID)
progress = session.console.restoreSnapshot(snapshot)
while not progress.completed:
progress.waitForCompletion(1000)
session.unlockMachine()
#start virtual machine
progress = machine.launchVMProcess(session,"gui", "")
while not progress.completed:
progress.waitForCompletion(1000)
vboxmgr.closeMachineSession(session)В коде используется таймаут, без которого регулярно возникает искслючение "The given session is busy". Правда, порой и этого таймаута мало. Собственно вопрос такой: как сделать так, что бы работало стабильно и без всяких таймаутов. Сразу отмечу, делал опрос состояния сессии в цикле, но это не работает. Более мнее надёжно работает только код с таймаутом, но мне кажется, есть более достойное решение.
P.S.: использую VirtualBox версии 4.1.12_Ubuntu r77245
