问题描述
我正在远程主机内执行gcloud命令。 但是,当我尝试使用ssh.exec_command执行任何命令时,该命令似乎已执行。但是我如何确保它正确执行。
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
Metadata:
namespace: default
name: secret-creator
rules:
- apiGroups: [""]
resources: ["secrets"]
verbs: ["create"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
Metadata:
name: role-binding
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: secret-creator
subjects:
- kind: ServiceAccount
name: default
namespace: default
如何检查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()的内容,但这通常不是必需的。