我正在使用paramiko在另一台服务器上执行命令,大多数情况下,它可以正常工作,但是对于某些服务器,执行少量命令后挂起。
我想知道如何解决和了解问题。
这是我的代码。
import paramiko
client = paramiko.SSHClient()
client.set_missing_host_ley_policy(paramiko.AutoAddPolicy)
ssh = client.connect('hostname,username,password')
channel = ssh.invoke_shell()
stdin = channel.makefile('wb')
stdout = channel.makefile('r')
stdin.write(cmd+'\n')
stdin.flush()
#it hangs here
for line in stdout:
print(line)
答案 0 :(得分:0)
您编写了一个for循环来读取您先前执行的某些命令的输出。 该命令是否连续运行?如果是,那么您需要连续读取缓冲区。
尝试编写类似的读取逻辑
for line in iter(lambda: stdout.readline(2048), ""):
print(line)
因为如果不指定大小,它将一直读取到EOF,这会使脚本等待命令结束,然后从read()返回并打印任何输出。
看到这个:Paramiko, exec_command get the output stream continuously