2010-02-22 3 views
0

우리는 virtualbox를 제어하기 위해 python virtualbox API를 사용하고 있습니다. 이를 위해 우리는 "pyvb"패키지를 사용하고 있습니다 (파이썬 API 문서에 나와 있습니다).python 명령 줄에서 VirtualBox 제어

al=pyvb.vb.VB() 
m=pyvb.vm.vbVM() 
al.startVM(m) 

우리는 파이썬 인터프리터를 사용하여 실행했습니다. 오류는 표시되지 않지만 가상 상자가 시작되지 않습니다. 무엇이 잘못 될 수 있는지 알려주십시오. (필요한 모든 모듈과 패키지를 가져 왔습니다.)

답변

0

인용 할 코드는 실행할 VM을 지정하지 않는 것 같습니다. getVM 호출을 수행 한 다음 startVM 호출에서 해당 VM 인스턴스를 사용해야합니까? 예 :

al=pyvb.vb.VB() 
m=al.getVM(guid_of_vm) 
al.startVM(m) 

... 지정된 GUID로 식별 된 VM (모든 VirtualBox VM에는 GUID가 만들어 질 때 할당 됨)이 시작됩니다. VM의 XML 파일에서 GUID를 가져올 수 있습니다. 런타임에 VM을 발견해야하는 경우 편리 listVMS 호출있다 :

al=pyvb.vb.VB() 
l=al.listVMS() 
# choose a VM from the list, assign to 'm' 
al.startVM(m) 
+0

우리는 그것을 시도했지만 같은 몇 가지 오류를 가지고 : 역 추적 (마지막으로 가장 최근 통화) : 파일 "", 1 호선, 파일 "/usr/lib/python2.5/site cmdbox '/ 패키지/pyvb-0.0.2-py2.5.egg/pyvb/vb.py ", 줄 65, startVM에 cmd ='% s % s '% (VB_COMMAND_STARTVM, vm.getUUID()) AttributeError :' NoneType '객체에'getUUID '속성이 없습니다. 도와주세요. – ask

+0

ur 빠른 응답을 주셔서 감사합니다 하지만 실제로 필요한 것은 python virtualbox API를 사용하여 해당 명령을 실행하는 것입니다. – ask

+0

@ask : 죄송합니다. VirtualBox가 명령 줄 도구에서 GUID 대신 이름을 사용하도록 지원했기 때문에 python 라이브러리도 사용할 수 있지만'getVM' 메서드는 GUID가 필요하다고 말합니다. 블레치. 그것에 대한 대답을 업데이트하고'listVMS' 메소드에주의를 환기시킵니다. –

3
내가 VM이 실행중인 경우, 특정 스냅 샷으로 VM을 복원하고 시작 찾기 위해 다음과 같은 기능을 사용할 수 있다는 것을 발견

VM 이름.

from subprocess import Popen, PIPE 

    def running_vms(): 
     """ 
     Return list of running vms 
     """ 
     f = Popen(r'vboxmanage --nologo list runningvms', stdout=PIPE).stdout 
     data = [ eachLine.strip() for eachLine in f ] 
     return data 

    def restore_vm(name='', snapshot=''): 
     """ 
     Restore VM to specific snapshot uuid 

     name = VM Name 
     snapshot = uuid of snapshot (uuid can be found in the xml file of your machines folder) 
     """ 
     command = r'vboxmanage --nologo snapshot %s restore %s' % (name,snapshot) 
     f = Popen(command, stdout=PIPE).stdout 
     data = [ eachLine.strip() for eachLine in f ] 
     return data 

    def launch_vm(name=''): 
     """ 
     Launch VM 

     name = VM Name 
     """ 
     command = r'vboxmanage --nologo startvm %s ' % name 
     f = Popen(command, stdout=PIPE).stdout 
     data = [ eachLine.strip() for eachLine in f ] 
     return data