virtualbox-python
.. image:: http://unmaintained.tech/badge.svg :target: http://unmaintained.tech :alt: No Maintenance Intended
NOTE: ⚠️ I am no longer actively maintaining this project. If you have a vested interest in seeing it continued to be maintained please reach out to me via email. Complete implementation of VirtualBox's COM API with a Pythonic interface.
Go to VirtualBox's downloads page (https://www.virtualbox.org/wiki/Downloads) and download the VirtualBox SDK.
Within the extracted ZIP file there is a directory called "installer". Open a console within the installer directory
and run python vboxapisetup.py install
using your system Python. This installs vboxapi
which is the interface
that talks to VirtualBox via COM.
Next is to install this library:
To get the latest released version of virtualbox from PyPI run the following::
$ python -m pip install virtualbox
or to install the latest development version from GitHub::
$ git clone https://github.com/sethmlarson/virtualbox-python
$ cd virtualbox-python
$ python setup.py install
.. code-block::
>>> import virtualbox
>>> vbox = virtualbox.VirtualBox()
>>> [m.name for m in vbox.machines]
["windows"]
.. code-block::
>>> session = virtualbox.Session()
>>> machine = vbox.find_machine("windows")
>>> # progress = machine.launch_vm_process(session, "gui", "")
>>> # For virtualbox API 6_1 and above (VirtualBox 6.1.2+), use the following:
>>> progress = machine.launch_vm_process(session, "gui", [])
>>> progress.wait_for_completion()
.. code-block::
>>> session.state
SessionState(2) # locked
>>> machine.state
MachineState(5) # running
>>> height, width, _, _, _, _ = session.console.display.get_screen_resolution()
.. code-block::
>>> session.console.keyboard.put_keys("Hello, world!")
>>> guest_session = session.console.guest.create_session("Seth Larson", "password")
>>> guest_session.directory_exists("C:\\Windows")
True
>>> proc, stdout, stderr = guest_session.execute("C:\\\\Windows\\System32\\cmd.exe", ["/C", "tasklist"])
>>> print(stdout)
Image Name PID Session Name Session# Mem Usage
========================= ====== ================ ======== ============
System Idle Process 0 Console 0 28 K
System 4 Console 0 236 K
smss.exe 532 Console 0 432 K
csrss.exe 596 Console 0 3,440 K
winlogon.exe 620 Console 0 2,380 K
services.exe 664 Console 0 3,780 K
lsass.exe 676 Console 0 6,276 K
VBoxService.exe 856 Console 0 3,972 K
svchost.exe 900 Console 0 4,908 K
svchost.exe 1016 Console 0 4,264 K
svchost.exe 1144 Console 0 18,344 K
svchost.exe 1268 Console 0 2,992 K
svchost.exe 1372 Console 0 3,948 K
spoolsv.exe 1468 Console 0 4,712 K
svchost.exe 2000 Console 0 3,856 K
wuauclt.exe 400 Console 0 7,176 K
alg.exe 1092 Console 0 3,656 K
wscntfy.exe 1532 Console 0 2,396 K
explorer.exe 1728 Console 0 14,796 K
wmiprvse.exe 1832 Console 0 7,096 K
VBoxTray.exe 1940 Console 0 3,196 K
ctfmon.exe 1948 Console 0 3,292 K
cmd.exe 1284 Console 0 2,576 K
tasklist.exe 124 Console 0 4,584 K
.. code-block::
>>> def test(event):
>>> print("scancode received: %r" % event.scancodes)
>>>
>>> session.console.keyboard.set_on_guest_keyboard(test)
140448201250560
scancode received: [35]
scancode received: [23]
scancode received: [163]
scancode received: [151]
scancode received: [57]
.. code-block::
>>> session.console.power_down()
Apache-2.0