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

