Google 云 - Python 自动化
Google cloud - Python automation
我想知道如何管理从 Python 脚本中嵌入的 gcloud 命令输出的数据。例如,我在Python中准备了简单的脚本。我正在从 Google Cloud Shell 编辑器中执行它。代码如下所示:
import subprocess
project = "gcloud info --format='value(config.project)'"
subprocess.call(project, shell=True)
subprocess.run(["gcloud config set project projectID"], shell=True)
result = subprocess.run(["gcloud compute instances os-inventory list-instances"], shell=True)
print(result)
作为终端的输出,我可以看到 VM 列表。我只想过滤掉具有特定 属性、名称或 IP 号的虚拟机。我如何管理这些输出,该变量 result
的 class 是 <class 'subprocess.CompletedProcess'>
.
脚本输出如下所示:
NAME ZONE MACHINE_TYPE PREEMPTIBLE INTERNAL_IP EXTERNAL_IP STATUS
server00 europe-west2-c e2-medium 10.x.x.x x.x.x.x RUNNING
server01 europe-west2-c e2-medium 10.x.x.x x.x.x.x RUNNING
您能否编辑问题并显示示例输出,以便在不设置 gcloud 的情况下更容易做出回答。
因为我不知道输出结果如何,所以我无法给出关于如何过滤掉的确切答案。
但是,如果您想从“gcloud compute instances os-inventory list-instances”中获取输出,您可以这样做:
import subprocess
project = "gcloud info --format='value(config.project)'"
subprocess.call(project, shell=True)
subprocess.run(["gcloud config set project projectID"], shell=True)
p = subprocess.Popen(["gcloud", "compute instances os-inventory list-instances"], stdout=subprocess.PIPE)
out, err = p.communicate()
print(out)
尝试使用 result.stdout
。
您可能还需要将 capture_output=True
添加到 subprocess.run 调用中。也一样:
subprocess.run(["gcloud config set project projectID"], capture_output=True, text=True, shell=True)
这将为您提供标准输出文本,然后您可以在换行符上拆分该文本,遍历创建的数组,过滤您需要的任何内容,等等。
对于过滤,您可以在 subprocess 命令上执行,或者 post 处理。因此,例如,如果您只想查看 us-central1 区域中的结果虚拟机,您可以将子进程命令更改为:
["gcloud config set project projectID"]
到
["gcloud config set project projectID | grep us-central1"]
或者,对于 post-process 你可以这样做:
project = "gcloud info --format='value(config.project)'"
subprocess.call(project, shell=True)
subprocess.run(["gcloud config set project projectID"], shell=True)
result = subprocess.run(["gcloud compute instances os-inventory list-instances"], shell=True)
arr = result.stdout.split("\n")
for line in arr:
if "us-central1" in line:
print(line)
我想知道如何管理从 Python 脚本中嵌入的 gcloud 命令输出的数据。例如,我在Python中准备了简单的脚本。我正在从 Google Cloud Shell 编辑器中执行它。代码如下所示:
import subprocess
project = "gcloud info --format='value(config.project)'"
subprocess.call(project, shell=True)
subprocess.run(["gcloud config set project projectID"], shell=True)
result = subprocess.run(["gcloud compute instances os-inventory list-instances"], shell=True)
print(result)
作为终端的输出,我可以看到 VM 列表。我只想过滤掉具有特定 属性、名称或 IP 号的虚拟机。我如何管理这些输出,该变量 result
的 class 是 <class 'subprocess.CompletedProcess'>
.
脚本输出如下所示:
NAME ZONE MACHINE_TYPE PREEMPTIBLE INTERNAL_IP EXTERNAL_IP STATUS
server00 europe-west2-c e2-medium 10.x.x.x x.x.x.x RUNNING
server01 europe-west2-c e2-medium 10.x.x.x x.x.x.x RUNNING
您能否编辑问题并显示示例输出,以便在不设置 gcloud 的情况下更容易做出回答。
因为我不知道输出结果如何,所以我无法给出关于如何过滤掉的确切答案。 但是,如果您想从“gcloud compute instances os-inventory list-instances”中获取输出,您可以这样做:
import subprocess
project = "gcloud info --format='value(config.project)'"
subprocess.call(project, shell=True)
subprocess.run(["gcloud config set project projectID"], shell=True)
p = subprocess.Popen(["gcloud", "compute instances os-inventory list-instances"], stdout=subprocess.PIPE)
out, err = p.communicate()
print(out)
尝试使用 result.stdout
。
您可能还需要将 capture_output=True
添加到 subprocess.run 调用中。也一样:
subprocess.run(["gcloud config set project projectID"], capture_output=True, text=True, shell=True)
这将为您提供标准输出文本,然后您可以在换行符上拆分该文本,遍历创建的数组,过滤您需要的任何内容,等等。
对于过滤,您可以在 subprocess 命令上执行,或者 post 处理。因此,例如,如果您只想查看 us-central1 区域中的结果虚拟机,您可以将子进程命令更改为:
["gcloud config set project projectID"]
到
["gcloud config set project projectID | grep us-central1"]
或者,对于 post-process 你可以这样做:
project = "gcloud info --format='value(config.project)'"
subprocess.call(project, shell=True)
subprocess.run(["gcloud config set project projectID"], shell=True)
result = subprocess.run(["gcloud compute instances os-inventory list-instances"], shell=True)
arr = result.stdout.split("\n")
for line in arr:
if "us-central1" in line:
print(line)