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

如何将subprocess命令输出转换为指定格式的Python字典?

问题描述

通过以下Python代码执行命令并获取stdout输出:

cmd = 'xx_cmd'
print(subprocess.Popen(cmd, stdout=subprocess.PIPE, shell=True).communicate()[0].decode('utf-8').strip())

得到的输出内容为:

Series# : 123456
diskid : 7788
type_disk : nvme
cap(mo) : 5685
disk_attr : ssd : link : mapped

需要将该输出转换为如下格式的Python字典:

{'Series#':'123456','diskid':'7788','type_disk':'nvme','cap(mo)':'5685','disk_attr': ['ssd','link','mapped']}

实现方法

可以通过以下代码实现输出内容的解析转换:

import subprocess

def parse_disk_output(cmd):
    # 执行命令并读取输出
    output = subprocess.Popen(cmd, stdout=subprocess.PIPE, shell=True).communicate()[0].decode('utf-8').strip()
    disk_info = {}
    
    # 逐行处理输出
    for line in output.split('\n'):
        # 按第一个': '分割键和值,避免值中包含冒号导致错误
        key_value = line.split(': ', 1)
        if len(key_value) != 2:
            continue
        
        key = key_value[0].strip()
        value_content = key_value[1].strip()
        
        # 处理disk_attr的多值情况
        if key == 'disk_attr':
            disk_info[key] = [item.strip() for item in value_content.split(': ')]
        else:
            disk_info[key] = value_content
    
    return disk_info

# 调用示例
cmd = 'xx_cmd'
result_dict = parse_disk_output(cmd)
print(result_dict)

代码说明

  • 使用split(': ', 1)进行分割,确保仅以键和值之间的第一个冒号加空格为分隔符,避免值字符串中的冒号干扰解析
  • 针对disk_attr字段特殊处理,将其值按: 分割后转换为列表
  • 增加基础格式校验,跳过不符合键值对结构的行,提升鲁棒性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 11:57:41