vboxapiを使ってVirtualBoxをPythonから操作その1
対象: VirtualBox-3.1, Python-2.6
日常的にデスクトップ用途としてUbuntu 9.10を使っています。たまに他のOSを使う用事があって、そういうときにはVirtualBoxから使っています。
デスクトップOSとして使っているだけなのでVMの起動も終了もGUIからやってしまうのですが、プログラムからVirtualBoxの機能にアクセスできるAPIが用意されているので、何ができるのか調べてみました。
APIにはPythonとC++用が用意されているのですが、Python用を使うことにします。
python-apiのありか
UbuntuではVirtualBoxをインストールすると以下の場所に勝手に入ります。
% dpkg -L virtualbox-3.1 | grep vboxapi /usr/share/pyshared/vboxapi-1.0.egg-info /usr/share/pyshared/vboxapi /usr/share/pyshared/vboxapi/__init__.py /usr/share/pyshared/vboxapi/VirtualBox_constants.py
APIドキュメント
VirtualBoxのダウンロードページの「VirtualBox 3.1.0 Software Developer Kit (SDK)」からSDKを入手してください。APIドキュメントはその中に同梱されています。なお、要ユーザ登録でした。
内容はdoxygenで生成したC++のAPIドキュメントです。Pythonから使う場合でも大いに参考になります。
サンプル1: VM一覧を表示する
VMを作成したユーザで実行する必要があります。
import vboxapi vbm = vboxapi.VirtualBoxManager(None, None) vbox = vbm.vbox machines = vbm.getArray(vbox, 'machines') for m in machines: print "----" print "id =", m.id print "name =", m.name print "state =", m.state print "vrdp =", m.VRDPServer.enabled print "vrdpPorts =", m.VRDPServer.ports
結果です。一部伏せ字。
---- id = e050****-****... name = Win**** state = 1 vrdp = True vrdpPorts = 3389 ---- id = 4f2f****-****... name = w**** state = 1 vrdp = True vrdpPorts = 3390 ---- id = e63b****-****... name = ***** state = 1 vrdp = True vrdpPorts = 3391
とっても簡単ですね。
注意
VirtualBox-3.0でこの調査をしている途中にVirtualBox-3.1がリリースされたのですが、一部のAPIに変更が加えられていました。
上記の例でも、3.0 では"VRDPServer.port"だったものが、3.1では"VRDPServer.ports"になったりしています。