Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用pyvbox在virtualbox中恢复快照_Python_Automation_Virtual Machine_Virtualbox - Fatal编程技术网

Python 使用pyvbox在virtualbox中恢复快照

Python 使用pyvbox在virtualbox中恢复快照,python,automation,virtual-machine,virtualbox,Python,Automation,Virtual Machine,Virtualbox,我想编写一段代码,使用恢复特定虚拟机上的特定快照 我有这个: def readSnap(mach_name): vbox = virtualbox.VirtualBox() vm = vbox.find_machine(mach_name) snap = vm.restore_snapshot() 但最后一行是: virtualbox.library_base.VBoxError: 0x80020009 (Method Machine::restoreSnapshot is no

我想编写一段代码,使用恢复特定虚拟机上的特定快照

我有这个:

def readSnap(mach_name):
  vbox = virtualbox.VirtualBox()
  vm = vbox.find_machine(mach_name)
  snap = vm.restore_snapshot()
但最后一行是:

virtualbox.library_base.VBoxError: 0x80020009 
(Method Machine::restoreSnapshot is not implemented)
我对使用这个模块感到很困惑。 我知道restore_snapshot()接受的参数必须是ISnapshot的实例,但我也不知道如何使用它


谢谢你的帮助和时间

IMachine
记录一个函数。如果您知道快照的名称或UUID,请传递该消息。否则,它会向其传递null(
None
?)参数以获取根快照。然后,您可以使用
children
属性对快照进行迭代,检查快照的属性,直到找到所需的快照

需要注意的一点是,您说过要“恢复特定快照”。 但是,您的函数不接受指定快照的参数。因此,您将添加参数,以便可以找到快照

您的代码可能如下所示:

def readSnap(mach_name, snapshot_name):
    vbox = virtualbox.VirtualBox()
    vm = vbox.find_machine(mach_name)
    snap = vm.find_snapshot(snapshot_name)
    vm.restore_snapshot(snap)

我找到了解决办法。问题是代码中没有包含这一行:

snap = vm.find_snapshot(s_name)
恢复快照后,您需要使用以下命令解锁会话:

session.unlock_machine()
这是我最后的代码:

def read_snapshot(m_name, s_name):
    start = time.time()
    name = "read_snapshot"
    vb = virtualbox.VirtualBox()
    session = virtualbox.Session()

    try:
        vm = vb.find_machine(m_name)
        snap = vm.find_snapshot(s_name)
        vm.create_session(session=session)
    except virtualbox.library.VBoxError as e:
        return Report(name, "failed", e.msg, True)
    except Exception as e:
        return Report(name, "failed", str(e), True)

    restoring = session.machine.restore_snapshot(snap)

    while restoring.operation_percent < 100:
        time.sleep(0.5)

    session.unlock_machine()
    if restoring.completed == 1:
        return Report(name, "success", "restoring completed in {:>.4} sec".format(str(time.time() - start)), False)
    else:
        return Report(name, "failed", "restoring not completed", True)
def read_快照(m_名称,s_名称):
开始=时间。时间()
name=“读取快照”
vb=virtualbox.virtualbox()
session=virtualbox.session()
尝试:
vm=vb.find_机器(m_名称)
snap=vm.find_快照(s_名称)
创建会话(会话=会话)
除了virtualbox.library.VBoxError作为e:
返回报告(名称,“失败”,e.msg,True)
例外情况除外,如e:
返回报告(名称,“失败”,str(e),True)
还原=会话.machine.restore\u快照(快照)
恢复运行时,百分比<100:
睡眠时间(0.5)
会话.解锁机器()
如果restoring.completed==1:
返回报告(名称,“成功”,“恢复在{:>.4}秒内完成”。格式(str(time.time()-start)),False)
其他:
返回报告(名称,“失败”,“恢复未完成”,真)

谢谢!我需要的行:
snap=vm.find\u snapshot(snapshot\u name)