如何在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
相关产品推荐
相关产品推荐

