VirtualBox Python API 恢复快照

3
我正在尝试通过SDK提供的vboxapi来管理一些虚拟机。到目前为止,我成功启动了虚拟机并将其关闭,但是我无法恢复快照。看起来关机过程会锁定虚拟机直到脚本终止,事实上这就是我遇到的错误:
    progress = self.session.console.restoreSnapshot(self.mach.currentSnapshot)
  File "", line 3, in restoreSnapshot
xpcom.Exception:0x80070005(对象未准备好)
下面是我按顺序调用的停止虚拟机和恢复快照的具体函数。
    def stop(self):
        if self.mach:
            # 关闭虚拟机。
            progress = self.session.console.powerDown()
            # 等待任务完成,最长等待时间为60秒。
            progress.waitForCompletion(VIRTUALBOX_TIMEOUT)
            # 检查关闭是否成功。
            if progress.resultCode != 0:
                log("[虚拟机] [关闭] [错误] 无法关闭虚拟机 \"%s\"。" % self.mach.name)
                return False
            else:
                log("[虚拟机] [关闭] 虚拟机 \"%s\" 成功关闭。" % self.mach.name)
        else:
            log("[虚拟机] [关闭] [错误] 没有虚拟机句柄。")
            return False

        return True

    def restore_snapshot(self):
        if self.mach:
            # 恢复虚拟机快照。
            progress = self.session.console.restoreSnapshot(self.mach.currentSnapshot)
            # 等待任务完成,最长等待时间为60秒。
            progress.waitForCompletion(VIRTUALBOX_TIMEOUT)
            # 检查恢复是否成功。
            if progress.resultCode != 0:
                log("[虚拟机] [恢复快照] [错误] 无法恢复虚拟机 \"%s\" 快照。" % self.mach.name)
                return False
            else:
                log("[虚拟机] [恢复快照] 虚拟机 \"%s\" 成功还原到当前快照。" % self.mach.name)
        else:
            log("[虚拟机] [恢复快照] [错误] 没有虚拟机句柄。")
            return False

        return True
我认为可能是我缺少了某些东西,有什么提示吗? 谢谢, C.
2个回答

2
如果您关闭了计算机,您需要创建一个新的IConsole对象来恢复快照。在您的代码中,在恢复快照之前,您可以添加这些行。
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。

0

您需要先锁定机器,以便为您创建控制台对象。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接