如何检查ssh.exec_命令是否成功执行?

2022-10-02 01:14:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在远程主机内执行gcloud命令。 但是,当我尝试使用ssh.exec_命令执行任何命令时,该命令似乎被执行了。但我如何才能确保它正确执行

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_命令是否成功执行

谢谢


Tags: key命令cmdparamiko远程sshlistxxxexecclustergcloudsetfirewallsshclientgke
1条回答
网友
1楼 ·

有两种方法,但一般来说,您应该使用以下方法评估正在执行的命令的退出代码:

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()的内容,但这通常不是必需的