我有一个脚本在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)
答案 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更改了?