paramiko关闭导致远程命令无法正常执行

360 阅读1分钟
import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(ip, username=user, port=22, password=password)
stdin, stdout, stderr = ssh.exec_command(command, get_pty=True, timeout=timeout)
ssh.close()

close会导致command运行失败,特别是长时间的任务 这边解决办法是用nohup重启一个子进程来执行命令 将command替换成命令:

nohup command > {输出日志} 2>&1& echo $! > {进程PID位置} & sleep 0.01

然后别忘了等待程序运行,只会堵塞0.01秒左右
stdout.read()

需要特别注意1: sleep 0.01 不能去掉, 会导致nohup无法运行 需要特别注意2: 不可以nohup command & 同样会导致command无法正确运行 需要特别注意3: get_pty会把所有console输出到stdout里,这样方便读日志一些...