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

如何将Volumio的subprocess.check_output结果转为Python字典?

解决Volumio状态输出转Python字典的问题

我明白你遇到的问题了——你想把volumio status返回的JSON结果转成Python字典,但直接用subprocess拿到的是字符串,导致索引报错,用dict()转换也失败。这其实是因为没用到专门处理JSON的工具,让我一步步帮你解决:

问题根源

subprocess.check_output()返回的是字符串(Python2)或字节串(Python3),不是现成的字典,所以直接用status["volume"]自然会报错;而dict()函数只能处理键值对序列(比如[("a",1), ("b",2)]),根本不认识JSON格式的字符串,转换失败也是必然的。

另外你用sed替换true/false/null的操作其实没必要,甚至可能出错——比如如果某个歌曲标题里刚好包含"true"这个词,会被错误替换,而且JSON里的null对应Python的None,换成False也不符合原意。

正确解决方案:用json模块解析

Python自带的json模块可以完美处理这种场景,直接把标准JSON字符串转换成Python字典,步骤如下:

  1. 执行volumio status命令获取原始JSON输出
  2. 如果是Python3,把字节串解码成UTF-8字符串(Python2不需要这一步)
  3. 用json.loads()把JSON字符串转成字典

完整代码示例:

import subprocess
import json

# 执行命令,获取输出(Python3需要decode,Python2可省略)
raw_output = subprocess.check_output(["volumio", "status"]).decode("utf-8")
# 解析JSON为字典
status_dict = json.loads(raw_output)
# 正常访问字典中的键
print(status_dict["volume"])

为什么这能行?

volumio status返回的是标准JSON格式,json.loads()会自动把JSON里的:

  • true → Python的True
  • false → Python的False
  • null → Python的None
    完全符合Python的类型规范,而且不会出现手动替换的意外问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:35:47