PyvBox TypeError

问题描述 投票:0回答:1

我有一些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,但没有运气。

python python-3.x virtualbox
1个回答
-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)

在我将~/.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)
© www.soinside.com 2019 - 2024. All rights reserved.