Question

J'essaie de contrôler la dernière Sun VirtualBox via son interface COM à partir de Python. Malheureusement, le code suivant ne fonctionne pas:

import win32com.client
VBOX_GUID = "{B1A7A4F2-47B9-4A1E-82B2-07CCD5323C3F}"
try :
  oVbox = win32com.client.Dispatch( VBOX_GUID )
  oVbox.FindMachine( "kubuntu" )
except Exception as oEx:
  print str( oEx )

L'erreur est générale "(- 2147467262," Aucune interface de ce type n'a été prise en charge ", Aucune, Aucune) &"; Il semble que la mauvaise partie de mon problème soit mon traitement COM via Python. N'importe qui peut jeter un coup d'oeil et suggérer quelque chose d'évident que je fais mal?

Était-ce utile?

La solution

Le problème est que l'objet renvoyé par FindMachine ("kubuntu") ne prend pas en charge l'interface IDispatch et que win32com ne prend pas en charge.

Vous pouvez utiliser mon paquet comtypes http: // starship .python.net / crew / theller / comtypes / , mais vous devez corriger la version dans le référentiel pour la faire fonctionner avec les bibliothèques de types VirtualBox.

Voici une session de démonstration:

Python 2.5.4 (r254:67916, Dec 23 2008, 15:10:54) [MSC v.1310 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> from comtypes.client import CreateObject
>>> box = CreateObject("VirtualBox.VirtualBox")
>>> m = box.FindMachine("Fedora")
>>> print m.State
4
>>> print m.CpuCount
1
>>> print m.Name
Fedora
>>>

Et voici le patch dont vous avez besoin:

Index: automation.py
===================================================================
--- automation.py   (revision 507)
+++ automation.py   (working copy)
@@ -753,6 +753,8 @@
     c_float: VT_R4,
     c_double: VT_R8,

+    c_ulonglong: VT_I8,
+
     VARIANT_BOOL: VT_BOOL,

     BSTR: VT_BSTR,
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top