stdout / stderr-ValueError:太多值无法解包(预期2)

时间:2018-06-26 17:47:00

标签: python python-3.x

我有一个脚本在python 2.7中运行良好,但现在在3.6中失败了。特别是我现在遇到问题

下面的代码行将调用以下函数:

exec_command(ssh, 'systemctl status myservice', timeout=60)

然后执行该功能。在这种情况下,ssh是使用paramiko的ssh连接。

def exec_command(ssh, cmd, timeout, want_exitcode=False):
    # one channel per command
    stdout, stderr = ssh.exec_command(cmd)
    # get the shared channel for stdout/stderr
    channel = stdout.channel

    # indicate that we're not going to write to that channel anymore
    channel.shutdown_write()

    # read stdout/stderr in order to prevent read block hangs
    stdout_chunks = []
    stdout_chunks.append(stdout.channel.recv(len(stdout.channel.in_buffer)))

运行时出现以下错误:

exec_command中的文件“ path \ myscript.py”,第54行 ValueError:太多值无法解包(预期2) [13340]无法执行脚本myscript

第54行是stdout, stderr = ssh.exec_command(cmd)

1 个答案:

答案 0 :(得分:1)

您从未说过ssh.exec_command是什么,但是我想您是在使用paramiko访问某些ssh服务器。

正如您在此处的文档http://docs.paramiko.org/en/2.4/api/client.html#paramiko.client.SSHClient.exec_command中所见,此函数返回3个值,而不是2个...因此您应将行更改为:

stdin, stdout, stderr = ssh.exec_command(cmd)

现在,我不确定为什么它以前能正常工作。也许paramiko api更改了?