在 python 中捕获 "HTTPError 404" 以获取 gcloud 命令
Catch "HTTPError 404" in python for gcloud commands
正在尝试捕获此错误:
ERROR: (gcloud.compute.instances.add-labels) HTTPError 404: The resource 'projects/matei-testing-4010-5cbdeeff/zones/us-east1-b/instances/all' was not found
尝试了不同版本的代码,none 对我有用。
我当前的代码似乎没有发现错误:
from googleapiclient import discovery, errors
try:
print("Applying labels")
gcloud_value = (f'gcloud compute instances add-labels all --labels="key=value" --zone=us-east1-b')
process = subprocess.run([gcloud_value], shell=True)
except errors.HttpError:
print("Command did not succeed because of the following error: {}".format(errors.HttpError))
如何捕获错误以便稍后使用它?
谢谢
试试这个:-
import subprocess
gcloud_value = 'gcloud compute instances add-labels all --labels="key=value" --zone=us-east1-b'
process = subprocess.run(gcloud_value, shell=True, capture_output=True)
print(process.stdout.decode('utf-8'))
print(process.stderr.decode('utf-8'))
print(process.returncode)
人们会期望 gcloud 向 stderr 发出错误。因此,通过检查 process.stderr,您应该能够找出哪里出了问题(如果有的话)。此外,如果 process.returncode 不为零,您应该能够推断出它不起作用,但这完全取决于底层应用程序(在本例中为 gcloud)的编写方式。那里有很多东西 returns 即使出现故障也是零!
我强烈建议您考虑使用 Google 的客户端库与其服务进行交互,而不是 subprocess
ing。
当您遇到调用 shell 时,不仅会限制错误处理,而且通常需要字符串“munging”,这也是不精确的临时身份验证。
Google 通常为其所有服务提供机器生成的“完美”SDK 实现。对于 Cloud(Compute 除外!?),还有 Cloud Client 库。
我鼓励您探索使用 Python SDK for Compute Engine:
https://cloud.google.com/compute/docs/tutorials/python-guide
正在尝试捕获此错误:
ERROR: (gcloud.compute.instances.add-labels) HTTPError 404: The resource 'projects/matei-testing-4010-5cbdeeff/zones/us-east1-b/instances/all' was not found
尝试了不同版本的代码,none 对我有用。
我当前的代码似乎没有发现错误:
from googleapiclient import discovery, errors
try:
print("Applying labels")
gcloud_value = (f'gcloud compute instances add-labels all --labels="key=value" --zone=us-east1-b')
process = subprocess.run([gcloud_value], shell=True)
except errors.HttpError:
print("Command did not succeed because of the following error: {}".format(errors.HttpError))
如何捕获错误以便稍后使用它?
谢谢
试试这个:-
import subprocess
gcloud_value = 'gcloud compute instances add-labels all --labels="key=value" --zone=us-east1-b'
process = subprocess.run(gcloud_value, shell=True, capture_output=True)
print(process.stdout.decode('utf-8'))
print(process.stderr.decode('utf-8'))
print(process.returncode)
人们会期望 gcloud 向 stderr 发出错误。因此,通过检查 process.stderr,您应该能够找出哪里出了问题(如果有的话)。此外,如果 process.returncode 不为零,您应该能够推断出它不起作用,但这完全取决于底层应用程序(在本例中为 gcloud)的编写方式。那里有很多东西 returns 即使出现故障也是零!
我强烈建议您考虑使用 Google 的客户端库与其服务进行交互,而不是 subprocess
ing。
当您遇到调用 shell 时,不仅会限制错误处理,而且通常需要字符串“munging”,这也是不精确的临时身份验证。
Google 通常为其所有服务提供机器生成的“完美”SDK 实现。对于 Cloud(Compute 除外!?),还有 Cloud Client 库。
我鼓励您探索使用 Python SDK for Compute Engine:
https://cloud.google.com/compute/docs/tutorials/python-guide