我有一些python3代码通过Pyvbox与虚拟机机器进行交互。
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,但没有运气。
我的问题出在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)
在我将~/.local/lib/python3.5/site-packages/virtualbox/library_ext/guest_session.py
从字节更改为第55行和第59行的.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)