2017-02-22 120 views
0

我想编写一个应用程序,它将从virtualBox克隆一个虚拟机,我将它安装到另一个虚拟机上。我假设我知道vdi文件在哪里并且可以访问它。我也知道我可以安装virtualbox管理器,然后在python中执行shell。然而,我正在寻找和现有的库/ API,避免我通过shell的权限的东西。我试过pyvbox,但没有奏效。一个简单的发现并没有得到机器。使用python从virtualbox克隆现有的虚拟机

# I tried these two commands 
vm = vbox.find_machine('test_vm') 
vm2 = vbox.find_machine('path/to/test_vm') 

我想这是因为虚拟机test_vm没有被注册到这个实例。有关如何从已安装的virtualbox克隆已有虚拟机的想法?

+0

关于pyvbox的IDK,但大多数'VBoxManage' shell命令都需要一台机器UUID。尝试'VBoxManage list vms'。 – 9000

回答

0

看起来像你跟在pyvbox documentation,但也许不正确?
这是我做的(win10,蟒蛇2.7):

>>> pip install pyvbox 
>>> python 
Python 2.7.10 (default, May 23 2015, 09:44:00) [MSC v.1500 64 bit (AMD64)] on win32 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import virtualbox 
>>> vbox = virtualbox.VirtualBox() 
>>> print("VM(s):\n + %s" % "\n + ".join([vm.name for vm in vbox.machines])) 
VM(s): 
+ tails2.4a 
+ Kali-Linux-testvm 
+ lubuntu1610 
>>> vm = vbox.find_machine('lubuntu1610') 
>>> vm 
<virtualbox.library_ext.machine.IMachine object at 0x0000000002D069B0> 

你指的 '会话',我想你的意思是:
session = virtualbox.Session()
这(只启动VirtualBox的会话)是独立的你find_machine命令。见下:
progress = vm.launch_vm_process(session, 'gui', '')
它基本上启动该virtualbox。

我认为如果你的'test_vm'机器确实存在(它是否?你在virtalbox中首先创建它?)它会被发现很好。也许只是像我这样列出你的虚拟机:
print("VM(s):\n + %s" % "\n + ".join([vm.name for vm in vbox.machines]))
然后find_machine?或者我误解了你的意思:p

相关问题