我有一些python3代码通过Pyvbox与virtualbox机器交互。
vm = vbox.find_machine(vm_name)
session = vm.create_session()
guest_session = session.console.guest.create_session(vm_username, vm_password)
guest_session.execute('C:\\Program Files\\Internet Explorer\\iexplore.exe', [url])
使用此代码段可以正常运行,但始终会引发错误(来自gues_session.execute):
TypeError:不带编码的字符串参数
我尝试使用python3库对URL进行编码,但是没有运气。
答案 0 :(得分:-1)
我的问题是在 guest_session.py 文件中。 pyvbox尝试从创建的进程中读取并将输出转换为字节:
def read_out(process, flags, stdout, stderr):
if library.ProcessCreateFlag.wait_for_std_err in flags:
process.wait_for(int(library.ProcessWaitResult.std_err))
e = bytes(process.read(2, 65000, 0))
stderr.append(e)
if library.ProcessCreateFlag.wait_for_std_out in flags:
process.wait_for(int(library.ProcessWaitResult.std_out))
o = bytes(process.read(1, 65000, 0))
stdout.append(o)
在第55和59行上将~/.local/lib/python3.5/site-packages/virtualbox/library_ext/guest_session.py
从字节更改为 .encode 后,检索到的命令输出没有任何问题
可能的解决方案:
def read_out(process, flags, stdout, stderr):
if library.ProcessCreateFlag.wait_for_std_err in flags:
process.wait_for(int(library.ProcessWaitResult.std_err))
e = process.read(2, 65000, 0).encode()
stderr.append(e)
if library.ProcessCreateFlag.wait_for_std_out in flags:
process.wait_for(int(library.ProcessWaitResult.std_out))
o = process.read(1, 65000, 0).encode()
stdout.append(o)