2017-02-22 121 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

相關問題