2009-05-05 14 views
0

Ich versuche, die neueste Sun VirtualBox über ihre COM-Schnittstelle von Python zu steuern. Aber leider der folgende Code nicht funktionieren:Steuern von VirtualBox über COM von Python?

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) 

Fehler sind allgemein „(-2147467262‚Nein Schnittstelle nicht unterstützt‘, None, None)“ Es scheint, dass der falsche Teil Gabe meiner COM über Python. Jeder kann einen Blick fallen lassen und etwas Offensichtliches vorschlagen, das ich falsch mache?

+0

Does not virtualbox Unterstützung Mozillas XPCOM aber nicht m $‘COM? – artificialidiot

+0

nur ein unverbindlicher Vorschlag, fangen Sie nicht jede Ausnahme wie Sie, das macht schwer zu finden Fehler. Das Standard-Traceback-Verhalten, das Sie erhalten, wenn Sie dieses try/exception nicht hinzufügen, ist viel nützlicher. – nosklo

+0

es ist nur ein Problem zu veranschaulichen, Testcode – grigoryvp

Antwort

3

Das Problem ist, dass das von FindMachine("kubuntu") zurückgegebene Objekt IDispatch interface nicht unterstützt, und win32com unterstützt das nicht.

Sie könnten mein comtypes Paket http://starship.python.net/crew/theller/comtypes/ dafür verwenden, aber Sie müssen die Version im Repository patchen, damit es mit den VirtualBox-Typ-Bibliotheken funktioniert.

Hier ist eine Demo-Session:

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 
>>> 

Und hier ist der Patch, die Sie benötigen:

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, 
+0

FYI: Mit comtypes Version 0.6.1 wird der Patch nicht mehr benötigt. – theller