[vbox-dev] Using python API bindings on Windows

Klaus Espenlaub klaus.espenlaub at oracle.com
Wed Jul 30 17:25:23 GMT 2014


On 30.07.2014 17:49, Mikhail Kovalev wrote:
> Ok, I've just noticed that there was already a thread on this topic
> earlier this month (I joined the dev list later, so I did not see this
> mail). The problem is that I am using 32 bit python on 64bit Win7. With
> 64bit Python the problem disappears. So currently there is no way to
> connect to 64 bit VBox from a 32 bit app (to get the console)? and what
> if I connect to a 32 bit VBox (on 32bit Win) from a 32 bit app, is this
> supposed to work?

If everything is consistently 32 bit (Windows and python), everything is 
fine. Same for consistent 64 bit.

The problem with the console being absent only happens with 32 bit 
python (or generally any 32 bit API client) and a 64 bit Windows. It's a 
shortcut we took when we finally managed to create working 32 bit COM 
support in a 64 bit package. It would be possible to make this work, but 
it's a significant effort (and would make a lot of code hard to read) 
which we don't want to make as it's already decided that all 
functionality which you're after will be moved to the server side in the 
next major release. It's a (for us) long known misdesign in the API that 
many snapshot operations are bolted to the console - which is nonsense, 
as these methods are also needed when there is no VM running. This is 
showing its ugly head in this combination.

In other words: we consider it to be a bug that a session without a 
corresponding running VM has a console object at all, but this bug can't 
be fixed without breaking API compatibility, which we don't do for releases.


> Thanks,
> Mikhail.
> 2014-07-30 17:23 GMT+02:00 Mikhail Kovalev <mikhail.kovalev at gmail.com
> <mailto:mikhail.kovalev at gmail.com>>:
>     Hi,
>     I am trying to use Python API bindings on Windows to control
>     virtualbox. I have the following problem: when I create a session
>     and lock a non-running VM with this session, I do not get a
>     reference to the console object. As a result, I cannot control the
>     non-running VM (e.g., I cannot restore a snapshot). I've tried to
>     use the following code:
>     from vboxapi import VirtualBoxManager
>     vbox_mgr = VirtualBoxManager(None, None)
>     vm = machByName(vbox_mgr, "win64")
>     snap = vm.findSnapshot("1")
>     session = vbox_mgr.mgr.getSessionObject(vbox_mgr.vbox)
>     vm.lockMachine(session, 2);
>     # session.console == None here
>     I've also tried to restore a snapshot using vboxshell frontend, and
>     I get the same result:
>     'NoneType' object has no attribute 'restoreSnapshot'
>     I've tried it on 4.3.12 and on 4.3.14 - same result.
>     For a running VM the console object is there and everything works
>     fine. I can also start VMs using "lauchVMProcess".
>     Is it a bug or is it a problem of my installation?
>     Thanks in advance,
>     Mikhail

More information about the vbox-dev mailing list