在编写 python 多线程程序, 使用 paramiko 库进行远程连接时, 遇到了不等待命令执行完成就退出的问题.
如下

1
2
3
4
5
def test()  :
with paramiko.SSHClient() as ssh:
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname="11.169.229.46", username="admin", key_filename="/root/workdir/repos/data_tools/data/data_groovy/ssh/id_rsa", timeout=8)
stdin, stdout, stderr = ssh.exec_command("sleep 3", timeout=3300)

经过排查后原来是 paramiko 的特性, 需要获取执行结果才能等待执行, 如下

1
2
3
4
5
6
def test()  :
with paramiko.SSHClient() as ssh:
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname="11.169.229.46", username="admin", key_filename="/root/workdir/repos/data_tools/data/data_groovy/ssh/id_rsa", timeout=8)
stdin, stdout, stderr = ssh.exec_command("sleep 3", timeout=3300)
print(stdout.read().decode("utf-8"))