2009-05-05 19 views
0

私は最新のSun VirtualBoxをPythonのCOMインターフェイス経由で制御しようとしています。残念ながら、次のコードは動作しません。しかし、:PythonからCOM経由でVirtualBoxを制御するには?

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) 

エラーが一般的である「(-2147467262、 『そのようなインタフェースがサポートされていません』、なし、なし)」 間違っている部分が私のCOMを渡すようですPythonを介して。誰でも見た目を落として、私が間違っている何か明白なことを示唆することができますか?

+0

いないのVirtualBoxサポートMozillaのXPCOMではなくメートルの$」COM? – artificialidiot

+0

あなたがしたようにすべての例外をキャッチしないでください、エラーを見つけるのは難しいです。 try/exceptを追加しないと得られるデフォルトのトレースバック動作ははるかに便利です。 – nosklo

+0

問題を説明するだけです。テストコード – grigoryvp

答えて

3

FindMachine("kubuntu")によって返されたオブジェクトはIDispatch interfaceをサポートしておらず、win32comはそれをサポートしていません。

私のcomtypesパッケージhttp://starship.python.net/crew/theller/comtypes/を使用できますが、VirtualBoxタイプライブラリで動作させるには、リポジトリにバージョンをパッチする必要があります。

はここでデモ・セッションです:

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

そして、ここで必要なパッチは次のとおりです。

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:バージョン0.6.1のcomtypesでは、このパッチは必要なくなりました。 – theller

関連する問題