Opened 7 years ago
Last modified 7 years ago
#17364 new defect
With python3 find_machine always throws TypeError
Reported by: | etam1024 | Owned by: | |
---|---|---|---|
Component: | other | Version: | VirtualBox 5.1.30 |
Keywords: | python3 | Cc: | |
Guest type: | other | Host type: | Linux |
Description
I've managed to compile VBox on openSUSE Tumbleweed with support for Python 3.6 (it required some minor patching. everything is here: https://build.opensuse.org/package/show/home:etamPL:virtualbox_python36/virtualbox)
Now this happens:
from virtualbox import VirtualBox v = VirtualBox() >>> v.find_machine("testvm") Traceback (most recent call last): File "/home/etam/.virtualenvs/vbox-test/lib/python3.6/site-packages/virtualbox/library_base.py", line 195, in _call_method ret = method(*in_params) File "<XPCOMObject method 'findMachine'>", line 3, in findMachine TypeError: internal error in PyXPCOM, parameter must be a bytes object During handling of the above exception, another exception occurred: Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/home/etam/.virtualenvs/vbox-test/lib/python3.6/site-packages/virtualbox/library.py", line 7280, in find_machine in_p=[name_or_id]) File "/home/etam/.virtualenvs/vbox-test/lib/python3.6/site-packages/virtualbox/library_base.py", line 186, in _call return self._call_method(method, in_p=in_p) File "/home/etam/.virtualenvs/vbox-test/lib/python3.6/site-packages/virtualbox/library_base.py", line 212, in _call_method errobj.msg = getattr(exc, 'msg', getattr(exc, 'message')) AttributeError: 'TypeError' object has no attribute 'message' >>> >>> v.find_machine(b"testvm") Traceback (most recent call last): File "/home/etam/.virtualenvs/vbox-test/lib/python3.6/site-packages/virtualbox/library_base.py", line 195, in _call_method ret = method(*in_params) File "<XPCOMObject method 'findMachine'>", line 3, in findMachine TypeError: This parameter must be a unicode object During handling of the above exception, another exception occurred: Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/home/etam/.virtualenvs/vbox-test/lib/python3.6/site-packages/virtualbox/library.py", line 7280, in find_machine in_p=[name_or_id]) File "/home/etam/.virtualenvs/vbox-test/lib/python3.6/site-packages/virtualbox/library_base.py", line 186, in _call return self._call_method(method, in_p=in_p) File "/home/etam/.virtualenvs/vbox-test/lib/python3.6/site-packages/virtualbox/library_base.py", line 212, in _call_method errobj.msg = getattr(exc, 'msg', getattr(exc, 'message')) AttributeError: 'TypeError' object has no attribute 'message'
This is caused by PyObject_AsNSString function in src/libs/xpcom18a4/python/src/VariantUtils.cpp which first checks if object is a unicode string and then passes it to PyUnicode_AsPRUnichar, which checks if it's bytes object.
Note:
See TracTickets
for help on using tickets.
Same problem here on Debian 9 and Virtualbox 5.1.30.
In [1]: from vboxapi import VirtualBoxManager
In [2]: mgr = VirtualBoxManager(None, None)
In [3]: vbox = mgr.vbox
In [4]: vbox.findMachine('test')
TypeError Traceback (most recent call last) <ipython-input-4-e0587a4315ea> in <module>()
/usr/lib/virtualbox/sdk/bindings/xpcom/python/xpcom/client/init.py in findMachine(self, Param1)
TypeError: internal error in PyXPCOM, parameter must be a bytes object