2009-05-05 2 views
0

저는 파이썬의 COM 인터페이스를 통해 최신 Sun VirtualBox를 제어하려고합니다. 그러나, 불행하게도, 다음 코드는 작동하지 않습니다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 나눠입니다 파이썬을 통해. 누구나 한 번 훑어 볼 수 있고 내가 뭘 잘못하고 있다는 것을 제안 할 수 있습니까?

+0

하지 않습니다 버추얼 지원 모질라의 XPCOM하지만 m의 $ '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 : comtype 버전 0.6.1에서는 더 이상 패치가 필요하지 않습니다. – theller

관련 문제