PyvBox TypeError

时间:2018-09-28 13:28:28

标签: python python-3.x virtualbox

我有一些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进行编码,但是没有运气。

1 个答案:

答案 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)