You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中从Popen输出读取指定列(GCP区域NAME列)

问题

我执行gcloud compute regions list命令获取GCP区域列表,输出如下:

NAME            CPUS     DISKS_GB   
asia-east1      0/600    0/102400  
asia-east2      0/600    0/102400  

希望在不使用pandas的情况下,读取输出中的第一列NAME并将其存储为列表。我的现有Python代码如下:

def get_process_cmd_output(cmd):
    try:
        p1 = Popen([cmd], stdout=PIPE, stderr=PIPE, shell=True)
        (output, err) = p1.communicate()
        return output.decode('UTF-8')
    except:
        return None


get_regions_list = 'gcloud compute regions list'
get_regions_response = get_process_cmd_output(get_regions_list)
print(get_regions_response)

请提供实现该需求的方法。

解决方案

直接对命令输出做字符串处理即可实现需求,无需依赖pandas。核心逻辑是拆分输出行、跳过表头、提取每行第一字段:

修改后的完整代码:

from subprocess import Popen, PIPE

def get_process_cmd_output(cmd):
    try:
        p1 = Popen([cmd], stdout=PIPE, stderr=PIPE, shell=True)
        (output, err) = p1.communicate()
        return output.decode('UTF-8')
    except:
        return None


get_regions_list = 'gcloud compute regions list'
get_regions_response = get_process_cmd_output(get_regions_list)

if get_regions_response:
    # 拆分输出为行,过滤空行和纯空白行
    lines = [line.strip() for line in get_regions_response.split('\n') if line.strip()]
    # 跳过表头行,提取每行第一个字段作为区域名
    regions = [line.split()[0] for line in lines[1:]]
    print(regions)  # 输出: ['asia-east1', 'asia-east2']
else:
    print("无法获取区域列表")

关键逻辑说明

  • split('\n'):将整个输出按换行符拆分为单独的行
  • line.strip() + 过滤条件:去除行首尾空白,同时排除空行,避免无效数据干扰
  • lines[1:]:跳过第一行的表头(NAME所在行),只处理数据行
  • line.split()[0]:按任意空白字符分割每行内容,取第一个元素就是目标区域名称

内容的提问来源于stack exchange,提问作者srs1628

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 22:33:12