python - 如何检查ssh.exec_command执行成功与否?
This question already has answers here:
Evaluating a remote (Paramiko) ssh command’s output into a success/failure boolean
我正在远程主机内执行gcloud命令。
但是,当我尝试使用ssh.exec_command执行任何命令时,该命令似乎已执行。但是我如何确保它正确执行。
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname = HOSTNAME,username = USERNAME,key_filename = FILENAME)
firewall_list = [gke-cluster-XXX-all,gke-cluster-XXX-ssh,gke-cluster-XXX-vms]
cmd = ‘gcloud compute firewall-rules delete’+firewall_list
stdin,stdout,stderr = ssh.exec_command(cmd)
ssh.close()
如何检查ssh.exec_command执行成功?
有两种方法,但是通常来说,应该使用以下方法评估正在执行的命令的退出代码:stdout.channel.recv_exit_status()请注意,这仅适用于马丁·普里克里(Martin Prikryl)提到的简短输出或快速命令,否则将导致死锁。
根据正在执行的命令,您可以检查零退出代码,也可以根据命令排除特定的退出代码。
cmd = ‘gcloud compute firewall-rules delete’+firewall_list
stdin,stdout,stderr = ssh.exec_command(cmd)
Verify this condition applies to your specific case
if stdout.channel.recv_exit_status() != 0:
error handling, your command was not succesful
ssh.close()
尽管不是首选方法,但您也可以在stdout和stderr上验证readlines()或read()的内容,但这通常不是必需的。
该部分内容参考:
https://www.coder.work/article/7334306