VirtualBox Python API还原快照
我正试图通过SDK提供的vboxapi管理一些虚拟机。 到目前为止,我成功地启动了虚拟机并关闭了它的电源,但我无法恢复快照。 看起来关机过程会锁定虚拟机,直到脚本终止,事实上这就是我得到的错误: progress = self.session.console.restoreSnapshot(self.mach.currentSnapshot) File "", line 3, in restoreSnapshot xpcom.Exception: 0x80070005 (The object is not ready) 进度=self.session.console.restoreSnapshot(self.mach.currentSnapshot) restoreSnapshot中第3行的文件“” xpcom.Exception:0x80070005(对象未就绪) 下面是我依次调用的停止vm和恢复快照的特定函数 def stop(self): if self.mach: # Poweroff the virtual machine. progress = self.session.console.powerDown() # Wait for task to complete with a 60 seconds timeout. progress.waitForCompletion(VIRTUALBOX_TIMEOUT) # Check if poweroff was successful. if progress.resultCode != 0: log("[Virtual Machine] [PowerOff] [ERROR] Unable to poweroff virtual machine \"%s\"." % self.mach.name) return False else: log("[Virtual Machine] [PowerOff] Virtual machine \"%s\" powered off successfully." % self.mach.name) else: log("[Virtual Machine] [PowerOff] [ERROR] No virtual machine handle.") return False return True def restore_snapshot(self): if self.mach: # Restore virtual machine snapshot. progress = self.session.console.restoreSnapshot(self.mach.currentSnapshot) # Wait for task to complete with a 60 seconds timeout. progress.waitForCompletion(VIRTUALBOX_TIMEOUT) # Check if snapshot restoring was successful. if progress.resultCode != 0: log("[Virtual Machine] [Restore Snapshot] [ERROR] Unable to restore virtual machine \"%s\" snapshot." % self.mach.name) return False else: log("[Virtual Machine] [Restore Snapshot] Virtual machine \"%s\" successfully restored to current snashot." % self.mach.name) else: log("[Virtual Machine] [Restore Snapshot] [ERROR] No virtual machine handle.") return False return TrueVirtualBox Python API还原快照,python,api,virtualbox,Python,Api,Virtualbox,我正试图通过SDK提供的vboxapi管理一些虚拟机。 到目前为止,我成功地启动了虚拟机并关闭了它的电源,但我无法恢复快照。 看起来关机过程会锁定虚拟机,直到脚本终止,事实上这就是我得到的错误: progress = self.session.console.restoreSnapshot(self.mach.currentSnapshot) File "", line 3, in restoreSnapshot xpcom.Exception: 0x80070005 (The object
def restore_snapshot(self):
if self.mach:
self.mach.lockMachine(self.session,1)
console = self.session.console
progress = console.restoreSnapshot(self.mach.currentSnapshot)
def停止(自):
如果self.mach:
#关闭虚拟机的电源。
progress=self.session.console.powerDown()
#等待任务完成,超时60秒。
进度。等待完成(VIRTUALBOX\u超时)
#检查断电是否成功。
如果progress.resultCode!=0:
日志(“[Virtual Machine][PowerOff][ERROR]无法关闭虚拟机\%s\”“%self.mach.name”)
返回错误
其他:
日志(“[虚拟机][关机]虚拟机\%s\”已成功关机。“%self.mach.name)
其他:
日志(“[虚拟机][关机][错误]没有虚拟机句柄。”)
返回错误
返回真值
def恢复_快照(自):
如果self.mach:
#还原虚拟机快照。
进度=self.session.console.restoreSnapshot(self.mach.currentSnapshot)
#等待任务完成,超时60秒。
进度。等待完成(VIRTUALBOX\u超时)
#检查快照还原是否成功。
如果progress.resultCode!=0:
日志(“[虚拟机][还原快照][错误]无法还原虚拟机\%s\”快照。“%self.mach.name)
返回错误
其他:
日志(“[虚拟机][还原快照]虚拟机\%s\”已成功还原到当前快照。“%self.mach.name)
其他:
日志(“[虚拟机][还原快照][错误]没有虚拟机句柄。”)
返回错误
返回真值
我想我可能遗漏了什么,有什么线索吗?
谢谢
C.如果关闭计算机电源,则必须创建新的IConsole对象来恢复快照。在代码中,可以在恢复快照之前添加以下行 def stop(self): if self.mach: # Poweroff the virtual machine. progress = self.session.console.powerDown() # Wait for task to complete with a 60 seconds timeout. progress.waitForCompletion(VIRTUALBOX_TIMEOUT) # Check if poweroff was successful. if progress.resultCode != 0: log("[Virtual Machine] [PowerOff] [ERROR] Unable to poweroff virtual machine \"%s\"." % self.mach.name) return False else: log("[Virtual Machine] [PowerOff] Virtual machine \"%s\" powered off successfully." % self.mach.name) else: log("[Virtual Machine] [PowerOff] [ERROR] No virtual machine handle.") return False return True def restore_snapshot(self): if self.mach: # Restore virtual machine snapshot. progress = self.session.console.restoreSnapshot(self.mach.currentSnapshot) # Wait for task to complete with a 60 seconds timeout. progress.waitForCompletion(VIRTUALBOX_TIMEOUT) # Check if snapshot restoring was successful. if progress.resultCode != 0: log("[Virtual Machine] [Restore Snapshot] [ERROR] Unable to restore virtual machine \"%s\" snapshot." % self.mach.name) return False else: log("[Virtual Machine] [Restore Snapshot] Virtual machine \"%s\" successfully restored to current snashot." % self.mach.name) else: log("[Virtual Machine] [Restore Snapshot] [ERROR] No virtual machine handle.") return False return True
def restore_snapshot(self):
if self.mach:
self.mach.lockMachine(self.session,1)
console = self.session.console
progress = console.restoreSnapshot(self.mach.currentSnapshot)
在SDK中:
当为特定会话(客户端)锁定计算机时,将创建控制台对象
进程)使用IMachine::lockMachine()或IMachine::launchVMProcess()
twitter@dsanchezlavado您需要先锁定机器,以便为您创建控制台对象