2010-02-22 3 views
0

Nous utilisons l'API python virtualbox pour contrôler la virtualbox. Pour cela, nous utilisons le paquet "pyvb" (comme indiqué dans la documentation de l'API python).Contrôle de VirtualBox à partir de la ligne de commande avec python

al=pyvb.vb.VB() 
m=pyvb.vm.vbVM() 
al.startVM(m) 

nous avons exécuté en utilisant l'interpréteur python. Aucune erreur n'est affichée mais la virtualbox ne démarre pas. Pourriez-vous nous dire ce qui pourrait être faux (tous les modules et paquets nécessaires ont été importés)

Répondre

0

Le code cité ne semble pas indiquer quelle machine virtuelle exécuter. Ne devriez-vous pas faire un appel getVM, puis utiliser cette instance de machine virtuelle résultante dans votre appel startVM? .: par exemple

al=pyvb.vb.VB() 
m=al.getVM(guid_of_vm) 
al.startVM(m) 

... commencerait la machine virtuelle identifiée avec le GUID donné (toutes les machines virtuelles VirtualBox ont un GUID attribué lors de leur création). Vous pouvez obtenir le GUID à partir du fichier XML de la machine virtuelle. Si vous avez besoin de découvrir des machines virtuelles à l'exécution, il y a l'appel listVMS pratique:

al=pyvb.vb.VB() 
l=al.listVMS() 
# choose a VM from the list, assign to 'm' 
al.startVM(m) 
+0

nous avons essayé, mais nous avons eu quelques erreurs comme: retraçage (le plus récent appel dernier): Fichier "", ligne1, Fichier « /usr/lib/python2.5/site -packages/pyvb-0.0.2-py2.5.egg/pyvb/vb.py ", ligne 65, dans startVM cmd = '% s% s'% (VB_COMMAND_STARTVM, vm.getUUID()) AttributeError: ' NoneType 'L'objet n'a aucun attribut' getUUID '. aidez-nous s'il vous plaît. – ask

+0

Merci pour votre réponse rapide mais ce dont nous avons réellement besoin est d'exécuter ces commandes en utilisant python virtualbox API. – ask

+0

@ask: Désolé, je me suis dit que VirtualBox supporte l'utilisation d'un nom au lieu d'un GUID dans ses outils de ligne de commande, la librairie python le ferait aussi, mais la méthode 'getVM' indique qu'elle nécessite un GUID. Blech. Mise à jour de la réponse pour cela et attirer l'attention sur la méthode 'listVMS'. –

3

Je trouve que je peux utiliser les fonctions suivantes pour trouver si une machine virtuelle est en cours d'exécution, de restaurer une machine virtuelle à un snapshot spécifique, et commencer une VM par son nom.

from subprocess import Popen, PIPE 

    def running_vms(): 
     """ 
     Return list of running vms 
     """ 
     f = Popen(r'vboxmanage --nologo list runningvms', stdout=PIPE).stdout 
     data = [ eachLine.strip() for eachLine in f ] 
     return data 

    def restore_vm(name='', snapshot=''): 
     """ 
     Restore VM to specific snapshot uuid 

     name = VM Name 
     snapshot = uuid of snapshot (uuid can be found in the xml file of your machines folder) 
     """ 
     command = r'vboxmanage --nologo snapshot %s restore %s' % (name,snapshot) 
     f = Popen(command, stdout=PIPE).stdout 
     data = [ eachLine.strip() for eachLine in f ] 
     return data 

    def launch_vm(name=''): 
     """ 
     Launch VM 

     name = VM Name 
     """ 
     command = r'vboxmanage --nologo startvm %s ' % name 
     f = Popen(command, stdout=PIPE).stdout 
     data = [ eachLine.strip() for eachLine in f ] 
     return data 
Questions connexes