Controllo di VirtualBox tramite COM da Python?
-
05-07-2019 - |
Domanda
Sto cercando di controllare l'ultimo Sun VirtualBox tramite la sua interfaccia COM da Python. Ma, sfortunatamente, il seguente codice non funziona:
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'errore è generale " (- 2147467262, 'Nessuna interfaccia supportata', nessuna, nessuna) " Sembra che la parte sbagliata sia la mia gestione COM tramite Python. Chiunque può dare un'occhiata e suggerire qualche cosa ovvia che sto facendo di sbagliato?
Soluzione
Il problema è che l'oggetto restituito da FindMachine (" kubuntu ")
non supporta l'interfaccia IDispatch
e win32com non lo supporta.
Potresti usare il mio pacchetto comtypes
http: // starship .python.net / crew / theller / comtypes / , ma devi correggere la versione nel repository per farla funzionare con le librerie dei tipi di VirtualBox.
Ecco una sessione demo:
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
>>>
Ed ecco la patch di cui hai bisogno:
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,